工作代码带来错误addEventListener不是一个函数
Working code brings error addEventListener is not a function
我使用以下代码:
for (el in document.getElementsByClassName("close-sidenav"))
document.getElementsByClassName("close-sidenav")[el].addEventListener("click", closeSidenav);
和它的工作完美,它添加点击事件的元素,但Chrome一直告诉我这个:
未捕获的类型错误:document.getElementsByClassName(…)[el]。addEventListener不是一个函数(…)
如何防止Chrome在工作代码上给我错误?
document.getElementsByClassName()
返回一个HTMLCollection对象。
该对象具有数字属性,但也具有将包含在for/in枚举中的其他属性。
因此,不要使用for/in与document.getElementsByClassName()
返回的HTMLCollection,因为它会返回该数据结构的其他属性,而不是你想要的元素。
使用常规的for
循环。
var list = document.getElementsByClassName("close-sidenav");
for (var i = 0; i < list.length; i++) {
list[i].addEventListener("click", closeSidenav);
}
查看HTMLCollection元素的For循环的其他答案,了解更多细节,包括在ES6中使用Array.from()
或使用for/of
循环进行此迭代的酷方法。
您可以使用下面的代码片段来完成相同的工作。
// Initially we grab once here the elements
var elements = document.getElementsByClassName("close-sidenav");
if(elements){
// We found elements with the specified class.
for (var i=0; i<elements.length; i++){
// Then we attach here an event listener to them.
elements[i].addEventListener("click", closeSidenav);
}
}
在上面的代码片段中,注意我们使用了一个简单的for
结构体,而不是for...in
结构体。后者与for
相比做了一些不同的事情。它循环遍历在in
之后的对象的键。 相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么