有24个div对象等待/侦听鼠标单击。单击一个div对象后,我想从所有24个div对象中删除EventListener
。
for (var i=1;i<=24;i++){
document.getElementById('div'+i).addEventListener('click',function(event){
for (var z=1;z<=24;z++){
document.getElementById('div'+z).removeEventListener()//Problem lies here
}
//Some other code to be run after mouseclick
},false);
}
问题是removeEventListener
嵌套在addEventListener
中,我需要将类型,监听器,标题定义为removeEventListener
方法的属性。而且我认为由于嵌套而无法定义监听器。
我还试图定义一个函数名,但它没有用:
for (var i=1;i<=24;i++){
document.getElementById('div'+i).addEventListener('click',function helpme(event){
for (var z=1;z<=24;z++){
document.getElementById('div'+z).removeEventListener('click',helpme,false);
}
//Some other code to be run after mouseclick
},false);
}
答案 0 :(得分:8)
它应该与命名函数一起使用。如果您的第二种方法无法正常工作,请尝试将初始侦听器存储到变量中,如下所示:
var handler = function(event) {
for(...) {
removeEventListener('click', handler, false);
}
};
addEventListener('click', handler, false);
聚苯乙烯。如果你关心速度,你可能希望考虑只使用一个事件处理程序。您可以将处理程序放入div的父元素中,然后从那里委派事件。使用24个处理程序,您当前的方法可能没有非常大的性能影响,但如果它感觉很慢,您应该记住这一点。