2012-06-13 15 views
12

Chrome Inspectorでイベントリスナーが表示されていますが、デバッグ作業をしていて、非常に多くのイベントリスナーが横たわっていますコードChromeのウェブキットインスペクタを使用してイベントリスナーを削除する

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コンソールの)リスナーへの参照を取得できます。

だから、最初のリスナーを削除するには、あなたができる:単に

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() 

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

を同様に、すべてのリスナーを削除するには、この機能を使用することができます

これは他の要素でも機能します。

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

そして他のタイプのイベント:Chromeなら、以下のジャクソンの答え@

getEventListeners($('#login-form')[0]).submit[0].remove() 
関連する問題