Uncaught TypeError: Object 0 has no method 'addEventListener'
var A={};
A.addEventsToClassName=function(event,className,func)
{
var a=document.getElementsByClassName(className);
for(var b in a)
{
b.addEventListener(event,func,false);
}
};
一旦稍后在代码中调用该函数,对象b就是一个元素对象。如何防止此错误?
答案 0 :(得分:0)
for (var b in a)
会在a
内提供属性名称,而不是实际值;因此,当您想要使用它们时,需要对其进行解除反复。{/ p>
a
此外,它是一个类似于数据结构的数组,所以你应该这样迭代它:
a[b].addEventListener(event, func, false);
答案 1 :(得分:0)
b
不是对象也不是元素,它是一个字符串("0"
)。 for...in
gives you the keys not the value.
不要使用for(var b in a)
循环遍历NodeList(它不仅会遍历自身的属性,还会遍历从其父级继承的属性),而是执行此操作:
for(var i = 0; i < a.length; a++){
a[i].addEventListener...
}
如果你问为什么,那么以此为例,
for(var a in document.querySelectorAll("body")){
console.log(a);
}
>"0"
>"length"
>"item"
您可以看到for...in
在这种情况下不起作用,因为length
和item
实际上不在列表中,但仍然继承了属性。
答案 2 :(得分:0)
b可能不是你的对象索引。也许你想要这样写:
a[b].addEventListener(event,func,false);