首页 > 解决方案 > 动态添加元素上的每个循环的单击事件 javascript / jquery

问题描述

我的问题是$('input[name=isDefault]').lengthequal 2,但每个都只运行一个。

$(saveProduct).click(function (e) {
    $('input[name=isDefault]').each(function (index) {
       var that = this;
       console.log(index, 'index');
       console.log($('input[name=isDefault]').length);
       // do something...
    })
})

$('input[name=isDefault]')是在另一个逻辑期间动态添加 obj。我知道有这样的解决方案$(upper container).on("event", dynamic obj inside upper container)- 但这会导致点击事件几乎无处不在,因为.on正在附加事件big area container

编辑: 出于测试目的,我做了一些更改:

var imgs = imgs = $('div[name=fileContainer]');
console.log('before loop', imgs.length); // = 1
for (var i = 0; i < imgs.length; i++) {
    console.log('inside loop', imgs.length); // = 1
    //do something - imgs is dynamicly added html element by jquery, when I load page there is 1 element with that name
}

$('div[name=fileContainer]').length;,但是当我在控制台中写入时它是相等的2(当然当我动态添加 + 1 fileContainer 元素时)

编辑: 这不是答案,但我省略了使用上述循环的需要。在代码的其他地方,我已经有了$(something).on("change", dynamiclyAddedElements function() {})不同的主要目的......但是!在那里我添加了额外的功能,我用所需的数据创建了 javascipt obj。然后我可以在上述click事件中使用它们。

标签: javascriptjqueryeventseach

解决方案


$(upper container).on("event", dynamic obj inside upper container) - 但这会导致点击事件几乎无处不在,因为 .on 将事件附加到大区域容器上

不对,可以用第二个参数指定选择器

例如

$('#upper_container').on('click', '.saveProduct', function(){...})

将单击处理程序添加到(也动态添加).saveProduct而不是#upper_container您声称的


推荐阅读