javascript中未捕获类型错误:object没有方法

Uncaught Type Error in javascript: object has no method

本文关键字:object 有方法 错误 类型 javascript      更新时间:2023-09-26
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意味着是一个元素对象。如何防止这个错误?

for (var b in a)将在a中给出属性名称,而不是实际值;所以当你想使用a时,你需要去参考它们。

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

同样,它是一个类似数组的数据结构,所以你应该这样迭代它:

for (var i = 0; i < a.length; ++i) {
    a[i].addEventListener(event, func, false);
}

b可能是一个索引,而不是您的对象。也许你想这样写:

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

b既不是对象也不是元素,它是字符串("0")。for...in给出的是键,而不是值。


不要使用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实际上不在列表中,但仍然继承属性

相关文章: