2012-04-17 29 views
5

không thể tìm ra lỗi trong mã này ở đâu. Bảng điều khiển gỡ lỗi của Chrome tiếp tục nói "Loại lỗi không mong muốn: Không thể gọi phương thức 'addEventListener' không xác định" ở dòng 31!Loại không bắt buộcLỗi: Không thể gọi phương thức 'addEventListener' không xác định

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

'phần tử' không tồn tại. Vui lòng đăng mã gọi 'bind()' và mã xác định 'phần tử'. – Teemu

+0

Tìm thấy nó! Đó là trong một kịch bản khác vấn đề. Tôi đã sử dụng bảng điều khiển dành cho nhà phát triển google chrome e đã theo dõi gọi lại trong tập lệnh đúng: D –

Trả lời

0

Nó có thể là trường hợp mà bind gọi của bạn kết thúc với một undefinedelement? (ví dụ: bạn vượt qua bộ chọn không khớp với bất kỳ phần tử nào trong DOM của bạn)

0

một số trình duyệt không biết "addEventListener" là gì. Hãy thử điều này:

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); 

Cũng vậy với removeEventListener.

Ngoài ra, cố gắng thay thế

element = $(element)[0]; 

với

element = $("#" + element); 

cung cấp chuỗi chứa id của phần tử, hoặc

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

nếu chuỗi có chứa các className của thành phần.

+1

Trình duyệt này không biết: "LoạiError: Không thể gọi phương thức 'addEventListener'' của undefined' "tại dòng 31!" – Teemu

+0

Nó không phải là vấn đề trình duyệt, có lẽ Pavlov là đúng ... ai biết nơi nào trong kịch bản khác nhau là vấn đề ... –

1

Trong trường hợp của tôi, điều này là do tập lệnh mở rộng Evernote Clipper. Bạn sẽ tìm thấy "Evernote" trong nhận xét khi bạn nhấp vào tập lệnh đó, người sẽ phát ra lỗi.

+0

Trong trường hợp của tôi, tôi có lỗi này trong một kịch bản khác. –

Các vấn đề liên quan