我正在尝试使用类的一部分向所有元素添加一个事件侦听器,但它只将它应用于节点列表中的最后一个对象.
var section = document.querySelectorAll('.section'); for(var i=0;i<section.length;i++){ var elem = section[i]; elem.addEventListener('click',function () {move (elem)},false); }
有没有办法为每一个添加事件监听器?
解决方法
问题是JavaScript中没有块范围.所以每次迭代都会覆盖elem,而不是每次都被声明为新变量.在每次迭代中声明新变量的唯一方法是通过一个函数:
for(var i = 0; i < section.length; i++){ (function(elem) { elem.addEventListener('click',function() { move(elem); },false); })(elem); }
但addEventListener将此设置为元素,因此在您的情况下,您可以整齐地执行:
for(var i = 0; i < section.length; i++){ elem.addEventListener('click',function () { move(this); },false); }