2013-04-12 12 views
7

Sto seguendo un tutorial su Lynda.com sul nuovo modello di eventi DOM.addEventListener non funziona in Chrome

Questo è il codice con cui sto lavorando.

function addEventHandler(oNode, sEvt, fFunc, bCapture){ 

if (typeof (window.event) != "undefined") 
    oNode.attachEvent("on" + sEvt, fFunc); 
else 
    oNode.addEventListener(sEvt, fFunc, bCapture); 
} 

function onLinkClicked(e){ 
alert('You clicked the link'); 
} 

function setUpClickHandler(){ 
addEventHandler(document.getElementById("clickLink"), "click", onLinkClicked, false); 
} 


addEventHandler(window, "load", setUpClickHandler, false); 

sto aggiungendo che per l'evento click su questo link

<a href="#" title="click me" id="clickLink">Click Me!</a> 

Funziona perfettamente bene in IE, Firefox, Opra ma non in Chrome. Mi sono guardato intorno, ma non sono ancora riuscito a trovare qualcosa di specifico. Alcune domande simili ma non rispondono alla mia domanda.

ottengo il seguente errore dalla console Chrome

Uncaught TypeError: Object [object HTMLAnchorElement] has no method 'attachEvent' 

eventuali sugestions o un link per la risposta.

grazie in anticipo.

+1

Questo è un cattivo tutorial e mostra chiaramente il pericolo di prova per l'esistenza di un oggetto diverso da quello che si desidera utilizzare. 'if (typeof oNode.attachEvent! =" undefined ")' sarebbe meglio. Meglio ancora sarebbe preferire la funzione basata sugli standard 'addEventListener' testandola per prima. –

risposta

7

Perché stai testando:

if (typeof (window.event) != "undefined") 

... al fine di decidere se utilizzare attachEvent()? Chrome definisce window.event, quindi il tuo codice prova a utilizzare attachEvent() che non è definito.

prova invece il test per il metodo diretto:

if (oNode.attachEvent) 
    oNode.attachEvent("on" + sEvt, fFunc); 
else 
    oNode.addEventListener(sEvt, fFunc, bCapture); 
+0

grazie, ho appena iniziato a esaminare il nuovo modello di eventi DOM, e questo è ciò che l'istruttore del corso sta testando, ma è del 2009. Ma la tua risposta è perfetta, non aveva molto senso neanche per me. Perché questo test non funziona su Chrome, ma funziona su tutti gli altri browser? Ma la tua risposta funziona, grazie anche io sono curioso di sapere perché non salta e passa alla dichiarazione else. –

+2

Anche il codice che hai mostrato non aveva senso nel 2009. Come ho detto nella mia risposta, Chrome definisce 'window.event', quindi la condizione' if' sarà vera in Chrome con un tentativo di usare '.attachEvent()' che non è definito in Chrome (come indicato dal testo dell'errore che hai citato). Il codice originale funziona in IE perché definisce sia 'window.event' che' .attachEvent() ', e funziona in FF, ecc., Perché non definisce' window.event'. – nnnnnn

+0

Grazie, ottima spiegazione. Perso nel primo commento. –

Problemi correlati