Javascript 多个addEventListener未存储唯一回调

Javascript 多个addEventListener未存储唯一回调,javascript,dom,Javascript,Dom,超级嗜睡和编码,不是一个好的组合,如果我是一名外科医生,我的病人早就去世了!下面是我在这个网站上的第一个问题: 我的代码: function cAction(manipulatedElement) { console.log(manipulatedElement); //test parameter // some manipulation code... } var cboxes = document.getElementsByClassName('checkbox-topp

超级嗜睡和编码,不是一个好的组合,如果我是一名外科医生,我的病人早就去世了!下面是我在这个网站上的第一个问题:

我的代码:

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
    );
}
函数计算(操纵元素){
console.log(操纵元素);//测试参数
//一些操作代码。。。
}
var cboxes=document.getElementsByClassName('checkbox-toppings');
l=cboxes.长度;
对于(i=0;i
当我选中/取消选中一个复选框时,我只会将“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 -->

意大利 辣味 香肠
火腿

欢迎使用
闭包的概念

处理程序正在捕获或关闭
i
的值,因此只会分配
i
的最后一个值

改变

 function(){cAction(i);}


使用
.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);
}
函数计算(操纵元素){
console.log(操纵元素);//测试参数
//一些操作代码。。。
}
var cboxes=document.getElementsByClassName('checkbox-toppings');
l=cboxes.长度;

对于(i=0;这是可行的!非常感谢@bevacqua,已经尝试用谷歌搜索这个问题超过2小时了……也许一小块HTML会有助于将此代码放到上下文中?@DarwinvonCorax HTML补充道
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);
}