2014-03-26 111 views
-1
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就意味着元素對象。我怎樣才能防止這個錯誤?未捕獲類型javascript中的錯誤:對象沒有方法

+1

你好嗎?接受你剛纔的問題? ](http://stackoverflow.com/q/22649724/1216976) – SomeKittens

回答

0

A 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); 
} 
0

b不是一個對象,也不是一個元件,它是一個字符串("0")。 for...ingives 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實際上不在列表中,但仍然是繼承的屬性。

0

b可能不是您的對象的索引。也許你想這樣寫:

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

這是行不通的'undefined不是函數'... –

+0

@Derek朕會功夫你是什麼意思undefined? a [b]? b是對象a中的索引或鍵,所以我認爲定義了[b]。 – zzy

+0

有一個['namedItem'方法](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection#Methods)它會引發這個錯誤。在'HTMLCollection.namedItem.addEventListener'中,'HTMLCollection.namedItem'中不存在'addEventListener'。 –

相關問題