Multiple addEventListener not storing unique callbacks
本问题已经有最佳答案,请猛点这里访问。
超级困和编码,不是一个很好的组合,如果我是一名外科医生,我的病人很久以前就已经去世了! 所以这是我在这个网站上的第一个问题:
我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function cAction(manipulatedElement) { console.log(manipulatedElement); //test parameter // some manipulation code... } var cboxes = document.getElementsByClassName('checkbox-toppings'); l = cboxes.length; for(i = 0; i < l; i++) { cboxes[i].addEventListener('change', function() { cAction(i); }, false ); } |
当我选中/取消选中一个复选框时,我只会将"34"(最后一个复选框)写入控制台,无论检查哪一个给出了什么? 不应该每个事件监听器的回调都记住索引号"i"吗?
希望有人可以帮助我。
从项目粘贴的一些HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <label> <input type="checkbox" class="checkbox-toppings" id="topp1010" value="" data-price="300" > <span class="toppings-text">pepperoni</span> </label> <label> <input type="checkbox" class="checkbox-toppings" id="topp1020" value="" data-price="300" > <span class="toppings-text">ham</span> </label> <!-- and 32 more items like this --> |
使用
1 2 3 4 5 6 7 8 9 10 | function cAction(manipulatedElement) { console.log(manipulatedElement); //test parameter // some manipulation code... } var cboxes = document.getElementsByClassName('checkbox-toppings'); l = cboxes.length; for(i=0; i<l; i++) { cboxes[i].addEventListener('change', cAction.bind(cboxes[i], i), false); } |
欢迎来到
处理程序正在捕获或关闭
更改
1 | function(){cAction(i);} |
至
1 2 3 | (function(temp){return function(){ cAction(temp); }}(i)) |