addEventListener在简单的for循环中工作,但不能使用for-in循环

时间:2017-10-02 02:31:26

标签: javascript loops for-loop addeventlistener for-in-loop

当我使用简单的for循环时,addEventListener在for循环中效果很好。

但是当我使用for-in循环时,会出现类似

的错误
  

未捕获TypeError:checklist [i] .addEventListener不是函数

这是我的工作代码。

var checklist = document.querySelectorAll(".checklist");
for (var i = 0, len = checklist.length; i < len; i += 1) {
  checklist[i].addEventListener('change', function (event) {
    alert('test');
  });
}

这是我的错误代码。

var checklist = document.querySelectorAll(".checklist");
for (var i in checklist) {
  checklist[i].addEventListener('change', function (event) {
    alert('test');
  });
}

我不知道两个代码之间有什么区别。 请帮我。谢谢!

1 个答案:

答案 0 :(得分:0)

问题是for-in循环遍历数组或对象的所有可枚举属性。因此,如果您在控制台中记录您的变量,您将看到它与元素的索引一起,您还会获得其他属性,例如数组的lengthkeysvalues和{{ 1}}或checklist[length]不是DOM元素。所以你不能为它们添加一个事件监听器。