web-dev-qa-db-ja.com

JavaScriptイベントリスナー/ハンドラーが要素/ドキュメントにアタッチされているかどうかを確認する方法

オンラインで検索しようとしましたが、検索クエリを適切に作成できるようには見えません。

簡単に聞こえますが、jqueryまたはjavascriptを使用して、要素/ドキュメント/ウィンドウに接続されているか、domに存在するすべてのハンドラーまたはイベントリスナーを一覧表示できます。

ただ疑問に思う。

前もって感謝します。

76
GnrlBzik

1.8より前のjQueryでは、$("#element").data("events")を使用してみてください

編集:

JQuery拡張機能もあります: listHandlers

47
Laimoncijus

デバッグするときに、イベントがあるかどうかだけを確認したい場合は、Chromeの開発者ツールの Visual Event またはElementsセクションを使用することをお勧めします:要素を選択して見てください「イベントリスナー」の右下。

コードで、バージョン1.8より前のjQueryを使用している場合は、次を使用できます。

_$(selector).data("events")
_

イベントを取得します。バージョン1.8から、これは廃止されました( this bug ticket を参照)。次を使用できます。

_$._data(element, "events")
_

ただし、これは内部jQuery構造であり、将来のリリースで変更される可能性があるため、お勧めしません。

この質問 には役に立つかもしれない答えがいくつかありますが、$(selector).data("events")と同じように特にエレガントなものはありません。

32
Luke

JQueryなし:

リスナーがelem.addEventListener()メソッドを使用して追加された場合、これらのリスナーをリストするのは簡単ではありません。独自のメソッドでラップすることにより、EventTarget.addEventListener()メソッドをオーバーライドできます。次に、登録されたリスナーの情報を取得します。

var f = EventTarget.prototype.addEventListener; // store original
EventTarget.prototype.addEventListener = function(type, fn, capture) {
  this.f = f;
  this.f(type, fn, capture); // call original method
  alert('Added Event Listener: on' + type);
}

http://jsfiddle.net/tomas1000r/RDW7F/ にある作業例

17
Tomas Jakubco

視覚的なイベント2を発見しました。

http://www.sprymedia.co.uk/article/Visual+Event+2

「make it goセクション」の下に移動し、ブックマークツールバーにテキストリンクをドラッグします。イベントがあるページに移動し、ブックマークをクリックします

fF Macでテスト済み

3
Mark