繁体   English   中英

jQuery即使启用了jQuery也无法更新PHP生成的元素。

[英]jQuery can't update elements generated by PHP, even with on.('click'

我有以下代码,可以正常工作:

for (var i = 0; i < <?php echo count($set); ?>; i ++){

    $('#inc' + i).on('click', function(){
        $('#scratchbox').val('test');
    });         

}

但是我需要的是这不起作用(唯一的区别是“ #scratchbox”已更改为“ #set” + i):

for (var i = 0; i < <?php echo count($set); ?>; i ++){

    $('#inc' + i).on('click', function(){
        $('#set' + i).val('test');
    });         

}

#inc divs和#set文本框都是由PHP在同一位置和同一时间生成的(技术上,按此顺序:#set1,#inc1,#set2,#inc2等)。 此外,在事件处理程序为静态#submit div的情况下,它还可以检索#set文本框中包含的值:

$('#submit').click(function(){

    for (var i = 0; i < <?php echo count($set); ?>; i ++){
        sets[i] = $('#set' + i).val();
    }

}); 

我应该更改什么,为什么?

为什么不向您的元素添加类名称,以便您可以执行以下操作:

$(document).on('click', '.click_element', function() {
   var ID = $(this).attr('id');
   $('#set' + ID).val('test');
});

并具有for循环,以使用ID创建那些click元素。

请注意,此解决方案在执行方面比必须在循环中绑定单击事件快得多。

在您的click事件处理程序运行时,如果i设置为其最大值,则该值。 在循环中创建一个IIFE,以保存for循环的每次迭代的i值。

例如:

for (var i = 0; i < <?php echo count($set); ?>; i ++){
    (function (inner_i) {
        $('#inc' + inner_i).on('click', function(){
            $('#set' + inner_i).val('test');
        });         
    })(i);
}

这是有关使用IIFE(立即调用功能表达式)的良好阅读: http ://benalman.com/news/2010/11/immediately-invoked-function-expression/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM