javascript中没有捕获的类型错误:对象没有方法

时间:2014-03-26 01:52:56

标签: javascript

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就是一个元素对象。如何防止此错误?

3 个答案:

答案 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在这种情况下不起作用,因为lengthitem实际上不在列表中,但仍然继承了属性。

答案 2 :(得分:0)

b可能不是你的对象索引。也许你想要这样写:

a[b].addEventListener(event,func,false);