我试图在jQuery 1.11.1中使用动态ID在多个复选框上设置更改侦听器。由于一个未知的原因,我尝试的东西都没有。脚本已加载并成功运行,直到我达到这样的程度:
$("input[id^='item_']").each(function(index,element) {
// This part works
console.log("Foreach loop: " + element.id);
$(element).change(function(){
// This is the part that does not work
alert('Change Happened');
});
});
我花了两个小时在谷歌上搜索不同的解决方案。我试图替换' $(元素)'使用' $("#" + element.id)'。然后我尝试了其他函数,比如bind(),on()等,但它们都没有工作。我的项目是一个perl应用程序,有这个html:
[% FOR item IN items %]
[% id = 'item_' _ item.title %]
<div class="choice-row">
<input type="checkbox" id="[% id %]">
<label for="[% id %]">Item</label>
</div>
[% END %]
有什么想法吗?感谢
答案 0 :(得分:1)
所以我没注意到的是该项目使用了一个javascript库iCheck。好像这个库会覆盖所有经典的jQuery监听器并实现它自己的。听众列表在这里:
在我的情况下,JS代码应如下所示:
$(element).on('ifChecked', function(event){
alert('Change Happened');
});
由于这个项目不是由我做的,我没有意识到他们使用了这样的东西。我希望这有助于将来的某个人。
答案 1 :(得分:-1)
你为什么在这里使用循环?相反,您可以使用
直接在集合中的所有元素上附加事件监听器$("input[id^='item_']").on('change', function(){
var id = this.id;
console.log(id);
})