on(' change',...)没有在jQuery 1.11.1中启动

时间:2017-12-18 10:04:57

标签: jquery

我试图在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 %]

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:1)

所以我没注意到的是该项目使用了一个javascript库iCheck。好像这个库会覆盖所有经典的jQuery监听器并实现它自己的。听众列表在这里:

iCheck Callbacks

在我的情况下,JS代码应如下所示:

$(element).on('ifChecked', function(event){
    alert('Change Happened');
});

由于这个项目不是由我做的,我没有意识到他们使用了这样的东西。我希望这有助于将来的某个人。

答案 1 :(得分:-1)

你为什么在这里使用循环?相反,您可以使用

直接在集合中的所有元素上附加事件监听器
$("input[id^='item_']").on('change', function(){
    var id = this.id;
    console.log(id);
})