2017-12-18 82 views
0

我试图在jQuery 1.11.1中使用动态ID在多个复选框上设置更改侦听器。对于一个不知名的理由,我所尝试的东西都不起作用。一个脚本被加载,直到我得到的地方,我做这点工作的成功:on('change',...)在jQuery 1.11.1中未启动

$("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'); 
    }); 
}); 

我花了2小时以来围绕谷歌搜索和测试不同的解决方案。我尝试用'$(“#”+ element.id)'替换'$(element)'。然后我尝试了其他函数,比如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 %] 

任何想法?谢谢

+1

检查您的控制台是否有错误。另外,这个元素是在* DOM加载之后添加的?你确定选择符匹配吗? –

+0

^^它看起来很像你在那个代码中有一个基本的语法错误(缺少'});')。另外请注意,只有当控件失去焦点时,“更改”才会触发。另请注意,v1.11.1已过时。 :-) –

+0

控制台没有错误,选择器匹配。是的,我可以得到它的ID和属性,它是唯一不工作的听众。 –

回答

-1

你为什么在这里使用循环?相反,您可以直接上的所有元素的集合中的使用

$("input[id^='item_']").on('change', function(){ 
    var id = this.id; 
    console.log(id); 
}) 
+0

虽然这是真的,但这不是问题的答案。如果OP的代码不起作用,则此代码不起作用。 –

+0

我认为这是正确的答案,因为它工作正常。 –

+0

再说一遍:如果OP的代码不起作用,这将不起作用。如果这可行,则OP的代码有效。这不是对这个问题的回答。重新阅读问题以及对问题的评论。 –

1

所以我没有注意到的是,该项目使用了JavaScript库I检查附加一个事件侦听器。看起来像这个库覆盖了所有经典的jQuery侦听器并实现它自己的。听众的名单是在这里:

iCheck Callbacks

而在我的情况下,JS代码应该是这样的:

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

由于这个项目不是我做的,我不知道他们使用这样的东西。我希望这可以帮助未来的人。