繁体   English   中英

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

[英]Uncaught Type Error in javascript: object has no method

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既不是对象也不是元素,它是一个字符串( "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实际上不在列表中,但仍然继承了属性。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM