2012-04-17 15 views
5

impossibile determinare dove si trova l'errore in questo codice. La console di debug di Chrome continua a dire "Uncaught TypeError: Impossibile chiamare il metodo 'addEventListener' di undefined" alla riga 31!Unchaught TypeError: impossibile richiamare il metodo 'addEventListener' di indefinito

jewel.dom = (function() { 

    var $ = Sizzle; 

    function hasClass(el, clsName){ 

     var regex = new RegExp("(^|\\s) + clsName + (\\s|$)"); 
     return regex.test(el.className); 
    } 

    function addClass(el, clsName) { 

     if (!hasClass(el,clsName)) { 
      el.className += ""+ clsName; 
     } 
    } 

    function removeClass (el, clsName) { 

     var regex = new RegExp("(^|\\s)" + clsName + "(\\s|$)"); 
     el.className = el.className.replace(regex, " "); 
    } 

    function bind(element, event, handler) { 

     if (typeof element == "string") { 
      element = $(element)[0]; 
     } 

     element.addEventListener(event, handler, false) 
} 

    return { 
     $:$, 
     hasClass : hasClass, 
     addClass : addClass, 
     removeClass : removeClass, 
     bind : bind 
    }; 
;})(); 
+2

'elemento' non esiste. Per favore pubblica il codice che chiama 'bind()' e il codice che definisce 'elemento'. – Teemu

+0

Trovato! Era in un altro script il problema. Ho usato la console di sviluppo di Google Chrome e ho rintracciato la callback nello script giusto: D –

risposta

0

Potrebbe essere il caso che il vostro bind invocazione finisce con un undefinedelement? (ad esempio, si passa un selettore che non corrisponde a nessuno degli elementi nel DOM)

0

alcuni browser non sanno cosa sia "addEventListener". Prova questo:

Element.prototype.setEvent = function(eventName, handler) 
{ 
    if(document.addEventListener) 
    { 
     this.addEventListener(eventName, handler); 
    } 
    else 
    { 
     if(document.attachEvent) 
     { 
      this.attachEvent("on" + eventName, handler); 
     } 
    } 
} 
element.setEvent(eventName, handler); 

Lo stesso vale per removeEventListener.

Inoltre, provare a sostituire

element = $(element)[0]; 

con

element = $("#" + element); 

purché stringa contiene l'id dell'elemento, o

element = $("." + element)[0]; 

se la stringa contiene la className del elemento.

+1

Questo browser non sa: "TypeError: Impossibile chiamare il metodo 'addEventListener'' di undefined' "alla riga 31!" – Teemu

+0

Non è un problema di browser, forse Pavlov ha ragione ... chissà dove nel vari script c'è il problema ... –

1

Nel mio caso, questo è causato dallo script di estensione di Evernote Clipper. Troverai "Evernote" nel commento quando fai clic su quel copione che elimina l'errore.

+0

Nel mio caso ho questo errore in un altro script. La sua disattivazione ha risolto il problema –

Problemi correlati