超级困倦和编码,不是一个很好的组合,如果我是一名外科医生,我的病人早就去世了!下面是我在这个网站上的第一个问题:
我的代码:
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:
<div class="toppings col-xs-6 col-sm-4 col-md-3">
<div class="checkbox"><label>
<input
type="checkbox"
class="checkbox-toppings"
id="topp1010"
value=""
data-price="300"
>
<span class="toppings-text">pepperoni</span>
</label></div>
</div>
<div class="toppings col-xs-6 col-sm-4 col-md-3">
<div class="checkbox"><label>
<input
type="checkbox"
class="checkbox-toppings"
id="topp1020"
value=""
data-price="300"
>
<span class="toppings-text">ham</span>
</label></div>
</div>
<!-- and 32 more items like this -->
发布于 2015-11-23 19:06:54
使用.bind
为每个回调创建不同的函数。
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);
}
发布于 2015-11-23 19:03:53
欢迎来到Closures
的概念。
处理程序正在捕获或关闭i
的值,因此只分配i
的最后一个值。
变化
function(){cAction(i);}
至
(function(temp){return function(){
cAction(temp);
}}(i))
https://stackoverflow.com/questions/33884700
复制相似问题