2013-03-18 8 views
19

यहाँ मेरी कोड है:मुझे TypeError क्यों मिल रहा है: obj.addEventListener कोई फ़ंक्शन नहीं है?

function addEvent(obj, type, fn) { 
    if (obj.attachEvent) { 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn](window.event);} 
    obj.attachEvent('on'+type, obj[type+fn]); 
    } else 
    obj.addEventListener(type, fn, false); 
} 

function alertWinner(){ 
    alert("You may be a winner!"); 
} 

function showWinner(){ 
    var aTag = document.getElementsByTagName("a"); 
    addEvent(aTag, 'click', alertWinner); 
} 

showWinner(); 

असल में, मैं फ़ायरबग कंसोल में काम कर रहा हूँ और पॉप अप करने के जब किसी भी एक टैग क्लिक किया जाता है एक चेतावनी प्राप्त करने की कोशिश।

मुझे समस्या नहीं दिखाई दे रही है जिसके परिणामस्वरूप यह काम नहीं कर रहा है और मुझे मेरे प्रश्न शीर्षक (फायरबग में देखा गया) में त्रुटि दी गई है। कोई?

उत्तर

35

document.getElementsByTagName डीओएम तत्वों के NodeList लौटाता है। प्रत्येक तत्व में addEventListener फ़ंक्शन है, लेकिन सरणी में एक नहीं है। इस पर

लूप:

function showWinner(){ 
    var aTags = document.getElementsByTagName("a"); 
    for (var i=0;i<aTags.length;i++){ 
     addEvent(aTags[i], 'click', alertWinner); 
    } 
} 
+4

यह एक सरणी नहीं है, यह एक नोडलिस्ट है। – VisioN

+0

@VisioN आप सही हैं, मेरे उत्तर को अपडेट किया है। –

+0

ऐसा लगता है कि इसे काम करना चाहिए और फिर भी मुझे मिल रहा है: रेफरेंस त्रुटि: एटैग परिभाषित नहीं है। – max7

7

aTagDOMNodeList का एक उदाहरण, DOMElement से नहीं है।

आप इस के बजाय कर सकता है:

var aTags = document.getElementsByTagName("a"); 
var aTag = aTags[0]; 

लेकिन स्पष्ट रूप से इस दृष्टिकोण एक दोष प्रस्तुत करता है, में है कि हो सकता है एक से अधिक a तत्व लौट आए। आपको एक अलग चयनकर्ता का उपयोग करना चाहिए जो संभव हो तो केवल एक तत्व लौटाता है।

+0

हां, इसे ठीक कर दिया गया, धन्यवाद – Sebas

3

यकीन नहीं क्यों, लेकिन मुझे फ़ायरफ़ॉक्स में addEvent is not defined मिला। मुझे एमडीएन पर addEvent() भी नहीं मिला। मुझे इसका उपयोग करना पड़ा:

function showWinner(){ 
    var aTags = document.getElementsByTagName("a"); 
    for (var i=0;i<aTags.length;i++){ 
     // addEvent(aTags[i], 'click', alertWinner); 
     aTags[i].addEventListener("click", alertWinner); 
    } 
} 
+0

ऐसा इसलिए है क्योंकि addevent मौजूद नहीं है :) – Sebas

संबंधित मुद्दे