22

これが不可能だとはまだ信じられませんが、dom をループして、「addEventListener」を使用してアタッチされたすべてのイベント ハンドラを確認する方法はありますか。この投稿と他の多くの人はノーと言います。

その場合、Chrome のインスペクターや Firebug などのアプリはどのように表示しますか? 何がバインドされているかを追跡できるように、おそらく何らかの方法で dom のメソッドを拡張していると思います。

4

4 に答える 4

34

Chrome のコンソールには、DOM ノードにイベント リスナーが登録されているかどうかを確認するのに役立つメソッドがあります。たとえば、ドキュメント ノードにアタッチされたイベント リスナーを確認するには、次のようにします。

https://developers.google.com/chrome-developer-tools/docs/commandline-api#geteventlistenersobject

getEventListeners(document);

すべての dom ノードを再帰的に反復し、必要に応じてアタッチされているすべてのイベント ハンドラーを見つけることができます。

于 2013-07-04T09:08:36.210 に答える
6

もちろん、ブラウザーは内部的にイベント リスナーのリストを持っていますが、ページ レベルの JavaScript には公開されていません。たとえば、Firebug (またはEventbug ) はおそらくnsIEventListenerInfoを使用します。

そうは言っても、この古い答えはまだ有効です:
DOM ノードでイベントリスナーを見つけるには?

于 2012-06-08T05:31:48.140 に答える
0

私が試したChrome v53コンソールで:

getEventListeners(document);

それは次を返します:

__proto__: Object

私が探しているものではなく、サブ要素。

だから私は試しました:

getEventListeners(window);

それが返す

Object {beforeunload: Array[1], load: Array[1]}

それが私が探しているものです。したがって、正しいアプローチは次のとおりだと思います。

getEventListeners(myDomElement):

myDomElementは、getElementById などの標準的な方法で取得した対象オブジェクトです...

于 2016-09-30T17:53:16.310 に答える