2012-06-13 35 views
12

Tôi biết bạn có thể xem trình xử lý sự kiện trong Trình kiểm tra Chrome nhưng tôi đang thực hiện một số công việc gỡ lỗi và có rất nhiều trình xử lý sự kiện nằm xung quanh. mãSử dụng trình kiểm tra sự kiện webkit của Chrome để xóa trình xử lý sự kiện

enter image description here

có cách nào để vô hiệu hóa một event listener nhanh chóng từ thanh tra Webkit?

Có thể có giao diện và nhập một số mã vào bảng điều khiển để removeEventListener trình nghe? Làm thế nào tôi sẽ làm điều này? Ví dụ như thế nào tôi sẽ loại bỏ các 'click' nghe trên

Trả lời

4

Xin lỗi, bạn đang trong số may mắn (ít nhất là trong thời gian này.) removeEventListener yêu cầu đối tượng chính xác đối tượng nghe làm đối số, và DevTools không cho phép bạn nhận được một nắm của hàm lắng nghe theo bất kỳ cách nào.

Nếu bạn chắc chắn cần tính năng này, vui lòng gửi lỗi tại http://new.crbug.com (đối với Chrome) hoặc http://bugs.webkit.org (đối với WebKit, cách ưu tiên).

+0

@ câu trả lời của Jackson bên dưới công trình trong chrome như của năm 2017. https://stackoverflow.com/a/32191966/2661831 – Josiah

3

Bạn có thể xóa trình xử lý sự kiện trong bảng điều khiển javascript. Đầu tiên tìm phần tử mà trình nghe sự kiện này được đính kèm. Hãy gọi nó là e. Sau đó, bạn thực hiện: e.onclick=null. Ví dụ: Ví dụ, nhiều trình xử lý sự kiện được gắn vào "body", sau đó mã trên trở thành : document.body.onclick=null. Sau đó trình xử lý sự kiện sẽ bị xóa.

+0

Chỉ cần cố gắng gì bạn đề nghị và nó đã không không hoạt động khi tạo trình xử lý sự kiện với: document.body.addEventListener ('click', function() {console.log ('clicks'); }); – d48

+1

yeah bạn đã đúng. Các xét nghiệm của tôi không bao gồm tất cả các trường hợp. Có vẻ như câu trả lời đúng là ở đây: http://stackoverflow.com/questions/4919079/remove-all-onclick-events-for-an-element –

7

Bạn có thể sử dụng getEventListeners(element).click[index].listener để nhận tham chiếu đến người nghe (trong bảng điều khiển WebKit).

Vì vậy, để loại bỏ người nghe đầu tiên, bạn có thể làm:

document.removeEventListener('click', getEventListeners(document).click[0].listener) 

Tương tự như vậy, để loại bỏ tất cả các thính giả, bạn có thể sử dụng chức năng này:

function removeEventListeners(element, listenerMap) { 
    Object.keys(listenerMap).forEach(function (name) { 
     var listeners = listenerMap[name]; 
     listeners.forEach(function (object) { 
      element.removeEventListener(name, object.listener); 
     }); 
    }); 
} 

removeEventListeners(document, getEventListeners(document)) 
+0

Đây là một câu trả lời tuyệt vời. Lưu ý, bạn có thể phải gọi nó bằng cửa sổ thay vì tài liệu. – Josiah

1

Đơn giản chỉ cần:

getEventListeners(document).click[0].remove() 

Điều này cũng làm việc với các yếu tố khác:

getEventListeners($('#submit-button')[0]).click[0].remove() 

Và các loại sự kiện:

getEventListeners($('#login-form')[0]).submit[0].remove() 
Các vấn đề liên quan