2010-03-04 31 views
75

Đã cố gắng tìm kiếm trực tuyến, nhưng có vẻ như tôi không thể xây dựng truy vấn tìm kiếm đúng cách.Làm cách nào để kiểm tra xem có trình xử lý sự kiện JavaScript/trình xử lý nào được đính kèm với một phần tử/tài liệu không?

Vì vậy, đơn giản như nó âm thanh, làm thế nào tôi có thể, hoặc với jquery hoặc chỉ javascript danh sách tất cả các xử lý hoặc người nghe sự kiện được gắn vào phần tử (s)/tài liệu/cửa sổ hoặc hiện tại trong dom.

Chỉ cần tự hỏi.

Cảm ơn bạn trước.

+1

Xem http://stackoverflow.com/questions/446892/how-to-find-event-listeners-on-a-dom-node và http: //stackoverflow.com/questions/7810534/have-any-browsers-implemented-the-dom3-eventlistenerlist/7814692#7814692 – Nickolay

Trả lời

47

Trong jQuery trước 1.8, hãy thử sử dụng $("#element").data("events")

EDIT:

Ngoài ra còn có jQuery mở rộng: listHandlers

+4

cảm ơn bạn Laimoncijus, bạn sẽ kéo nó ra sao mà không có jquery? có thể bạn có thể cho tôi liên kết để đọc tài liệu về chủ đề này. – GnrlBzik

+3

Dường như nó không thực sự khả thi trong việc thực hiện mô hình sự kiện W3C hiện tại. Xem: http://www.quirksmode.org/js/events_advanced.html (tìm kiếm "Trình xử lý sự kiện nào được đăng ký?") Trang có cũ hơn một chút, vì vậy có thể mọi thứ trở nên tốt hơn, không thể nói cho bạn biết, không bao giờ thử bản thân mình ... – Laimoncijus

+0

Cảm ơn bạn Laimoncijus:) – GnrlBzik

3

Tôi chỉ phát hiện ra sự kiện thị giác 2:

http://www.sprymedia.co.uk/article/Visual+Event+2

đi theo "làm cho nó đi phần" và kéo một đường link đến bạn thanh công cụ bookmark đi đến một trang có các sự kiện và click vào bookmark

thử nghiệm trong FF Mac

+0

Điều này đúng, hiện không hoạt động với các sự kiện được ủy quyền. Vé được thêm vào để hy vọng giải quyết vấn đề này trong tương lai: https://github.com/DataTables/VisualEvent/issues/33 – KoalaBear

32

Khi gỡ lỗi, nếu bạn muốn chỉ thấy nếu có một sự kiện , Tôi khuyên bạn nên sử dụng phần Visual Event hoặc phần Phần tử của Công cụ dành cho nhà phát triển của Chrome: chọn một phần tử và tìm "Người nghe sự kiện ở dưới cùng bên phải.

Trong code của bạn, nếu bạn đang sử dụng jQuery trước khi phiên bản 1.8, bạn có thể sử dụng:

$(selector).data("events") 

để có được các sự kiện. Kể từ phiên bản 1.8, điều này bị gián đoạn (xem this bug ticket). Bạn có thể sử dụng:

$._data(element, "events") 

nhưng điều này không được khuyến nghị vì đây là cấu trúc jQuery bên trong và có thể thay đổi trong bản phát hành trong tương lai.

This question có một số câu trả lời có thể hữu ích, nhưng không có câu trả lời nào đặc biệt thanh lịch theo cùng cách mà $(selector).data("events") là.

+0

Sự kiện trực quan +1 là không thể thiếu. Tôi thực sự ngạc nhiên khi chức năng này không được các trình duyệt cho phép sử dụng cho các công cụ dev của họ. – L0j1k

15

Without jQuery:

nếu nghe được bổ sung bằng phương pháp elem.addEventListener(), nó không phải là dễ dàng để liệt kê những người nghe. Bạn có thể ghi đè lên phương thức EventTarget.addEventListener() bằng cách gói nó bằng của riêng bạn. Sau đó, bạn sẽ có thông tin, những gì người nghe đã được đăng ký.

var f = EventTarget.prototype.addEventListener; // store original 
EventTarget.prototype.addEventListener = function(type, fn, capture) { 
    this.f = f; 
    this.f(type, fn, capture); // call original method 
    alert('Added Event Listener: on' + type); 
} 

dụ làm việc bạn có thể tìm thấy ở http://jsfiddle.net/tomas1000r/RDW7F/

+0

đẹp! câu trả lời đúng cho câu hỏi. –

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