2012-04-17 10 views
5

no se puede averiguar dónde está el error en este código. La consola de depuración de Chrome sigue diciendo "UnEught TypeError: no se puede llamar al método 'addEventListener' de undefined" en la línea 31.TypeError no detectado: no se puede llamar al método 'addEventListener' de undefined

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

'element' no existe. Por favor, publique el código que llama a 'bind()' y el código que define 'element'. – Teemu

+0

¡Lo encontré! Fue en otro guión el problema. He usado google chrome developer console e rastreé la devolución de llamada en el script correcto: D –

Respuesta

0

Podría ser el caso de que su bind invocación termina con un undefinedelement? (Por ejemplo, si pasa un selector que no coincide con ninguno de los elementos de su DOM)

0

algunos navegadores no saben qué es "addEventListener". Pruebe esto:

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 mismo ocurre con removeEventListener.

Además, trate de sustituir

element = $(element)[0]; 

con

element = $("#" + element); 

siempre que la cadena contiene el id del elemento, o

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

si la cadena contiene el className del elemento.

+1

Este navegador lo sabe: "TypeError: no se puede llamar al método 'addEventListener'' de undefined' "en la línea 31!" – Teemu

+0

No es un problema del navegador, tal vez Pavlov tiene razón ... quién sabe dónde está el problema en varios guiones ... –

1

En mi caso, esto es causado por el script de extensión Evernote Clipper. Encontrará "Evernote" en comentario cuando haga clic en el guión que arroja el error.

+0

En mi caso tengo este error en otro guión. Apagarlo solucionó el problema –

Cuestiones relacionadas