Re: [ js ] 如何知道 某個元素是否有 Event Listener

看板Ajax作者 (丹丹)時間15年前 (2009/12/29 22:27), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
你這個辦法是為 Element 新增 observe method, observe method 執行 addEventListener, 並設定元素的 __eventListeners 屬性來記錄。 不過,站長/路人不會知道我新增了 observe method,(因為我這是Greasemonkey script) 他們仍然會用 addEventListener,而這無法被記錄。 仍然感謝您的回文。 <html> <head> <script> //為 Element 新增 observe method Element.prototype.observe = function (eventName, handler) { if(!this.__eventListeners){ this.__eventListeners = []; } this.__eventListeners[eventName] = true;//設定 __eventListeners 屬性記錄 this.addEventListener(eventName, handler, false);//執行 addEventListener } //為 Element 新增 hasEventListener method // 執行過 elmnt.observe(eventName, handler); // 再調用 elmnt.hasEventListener(eventName); 會回傳 true Element.prototype.hasEventListener = function (eventName) { return this.__eventListeners ? (this.__eventListeners[eventName] ? true : false) : false; } function init() { var test = document.getElementById('test'); alert(test.hasEventListener('click')); // false test.observe('click', function() { alert(test.hasEventListener('click')); // true }); // 如果站長or路人的腳本使用 addEventListener,而非 observe //test.observe('mouseover', function(){ test.addEventListener('mouseover', function(){ this.value='There is a mouseover event.'; }, false); alert(test.hasEventListener('mouseover')); // false, not true //mouseover event is added by addEventListener //而這無法被記錄。 } </script> </head> <body onload="init();"> <input type="button" value="test" id="test"> </body> </html> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.213.80 ※ 編輯: shyangs 來自: 58.114.213.80 (12/29 22:27)
文章代碼(AID): #1BEX7SaA (Ajax)
文章代碼(AID): #1BEX7SaA (Ajax)