2012-06-13 35 views
12

我知道你可以在Chrome Inspector中看到事件監聽器,但我正在做一些調試工作,並且周圍有太多的事件監聽器,我想禁用一些編輯器而無需編輯代碼使用Chrome瀏覽器的webkit檢查器刪除事件監聽器

enter image description here

有沒有辦法從WebKit的檢查員迅速禁用事件監聽器?

也許看看,並輸入一些代碼到控制檯到removeEventListener聽衆?我將如何做到這一點?例如,我將如何刪除'點擊'偵聽器上面

回答

4

對不起,你是運氣不好(至少暫時)。removeEventListener要求確切的監聽器函數對象作爲參數,DevTools不讓你得到以任何方式抓住聽衆功能。

如果您確定需要此功能,請提供http://new.crbug.com(針對Chrome)或http://bugs.webkit.org(針對WebKit,首選方式)的錯誤。

+0

@低於鉻作品的傑克遜的回答2017年https://stackoverflow.com/a/32191966/2661831 – Josiah

3

您可以在javascript控制檯中刪除事件偵聽器。 首先找到此事件偵聽器附加到的元素。我們稱之爲e。然後執行: e.onclick=null。 例如,許多事件監聽器被附加到「body」,然後上面的代碼變爲: document.body.onclick=null。 之後,事件偵聽器被刪除。

+0

剛試過你建議,它沒在創建一個事件監聽器時不起作用:document.body.addEventListener('click',function(){console.log('clicked'); }); – d48

+1

是的,你是對的。我的測試沒有涵蓋所有情況。似乎正確的答案在這裏:http://stackoverflow.com/questions/4919079/remove-all-onclick-events-for-an-element –

7

您可以使用getEventListeners(element).click[index].listener來獲取對偵聽器的引用(在WebKit控制檯中)。

因此,要刪除第一個聽衆,你可以這樣做:

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

同樣,要刪除所有監聽器,你可以使用此功能:

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

這是一個很好的答案。請注意,您可能必須使用窗口而不是文檔來調用它。 – Josiah

1

簡單:

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

這也適用於其他元素:

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

與其他類型的事件:

getEventListeners($('#login-form')[0]).submit[0].remove()