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);
}