Nếu bạn thực sự muốn thực hiện việc này, bạn có thể ghi đè addEventListener
để theo dõi các sự kiện được đăng ký và kích hoạt.
var myEventManager = (function() {
var old = EventTarget.prototype.addEventListener,
listeners = [],
events = [];
EventTarget.prototype.addEventListener = function(type, listener) {
function new_listener(listener) {
return function(e) {
events.push(e); // remember event
return listener.call(this, e); // call original listener
};
}
listeners.push([type, listener]); // remember call
return old.call(this, type, new_listener(listener)); // call original
};
return {
get_events: function() { return events; },
get_listeners: function() {return listeners; }
};
}());
Tuy nhiên, có những lý do không đếm được không để làm điều này, không kém phần quan thực tế là bạn sẽ nhanh chóng chạy ra khỏi bộ nhớ khi bạn ghi lại hàng ngàn sự kiện như di chuyển chuột. Điều này cũng sẽ không ghi lại các trình nghe sự kiện được đặt theo các cách như elt.onclick
. Dĩ nhiên, nó cũng sẽ không khiến người nghe được thiết lập thông qua API IE attachEvent
cũ. Quan trọng nhất, nó sẽ không giúp bạn với các sự kiện được tạo ra và lắng nghe nội bộ, chẳng hạn như một cú click chuột vào một hộp kiểm. (Một giải pháp hoàn chỉnh cũng sẽ yêu cầu xử lý removeEventListener
.)
Bạn cũng có thể ghi đè createEvent
và dispatch
theo cách tương tự, nhưng lại chỉ ghi lại các sự kiện được tạo hoặc gửi đi rõ ràng trong mã JS.
Nếu bạn thực sự muốn làm những gì bạn mong muốn, tôi đoán bạn cần phải ngã ba Chrome.
Nguồn
2014-09-06 04:01:48
Vì vậy, câu hỏi đầu tiên: tại sao? Thật tuyệt vời khi bạn muốn làm điều này, nhưng nó cũng thực sự kỳ lạ. –
Bất kể vấn đề của bạn là gì, đòi hỏi điều này, chúng có lẽ là một lựa chọn tốt hơn. Bạn có thể đối phó với các sự kiện tổng hợp dễ dàng và cũng tạo ra các yếu tố động (có nhiều cách để phát hiện bất cứ khi nào một phần tử được tạo ra) – Markasoftware
Điều này nghe khá hay. đừng nghe những người khác đang đặt bạn xuống. –