Chromeを使用して、要素にバインドされているイベントを見つける方法


148

私のページにリンクがあるとしましょう:

<a href="#" id="foo">Click Here</a>

他には何も知りませんが、リンクをクリックすると、 alert("bar")とが表示されます。ですから、どこかにコードがバインドされていることを知ってい#fooます。

バインドしているコードを見つけるにはどうすればよいですか alert("bar")クリックイベントにですか?Chromeでの解決策を探しています。

追伸:この例は架空のものなので、「XXXXXXを使用してプロジェクト全体で「alert(\ "bar \")」を検索するようなソリューションは探していません。実際のデバッグ/トレースソリューションが必要です。

回答:


140

Chrome 15.0.865.0 devの使用。要素パネルには「イベントリスナー」セクションがあります。

ここに画像の説明を入力してください

また、スクリプトパネルの「イベントリスナーブレークポイント」。マウスを使用->ブレークポイントをクリックし、コールスタックを監視しながら「次の関数呼び出しにステップイン」して、どのユーザーランド関数がイベントを処理しているかを確認します。理想的には、jQueryの縮小バージョンを非縮小バージョンに置き換えて常にステップインする必要がなく、可能な場合はステップオーバーを使用するようにします。

ここに画像の説明を入力してください


10
近づいてきましたが、結果のほとんどは16行目を指しています... jquery.min.js :((理由はわかりますが、説明する必要はありませんが、bind()メソッドをだれが呼び出したかjQuery?
FMaz008

これらのツールはすべてChrome 12.0.742.100でも利用できます。:)ありがとう!
FMaz008

13
@Fluffy:する必要はありません。{ }jsを表示するときに、左下隅の記号をクリックするだけです。マジック。
Hannes Schneidermayer

jQueryの複雑なイベントディスパッチコードをステップ実行するのは非常に困難です。以下のjQuery Auditの回答(stackoverflow.com/a/30487583/24267)は、はるかに優れています。
mhenry1384

3
コールスタックからjqueryを除外するには、スクリプトをブラックボックス化します:developer.chrome.com/devtools/docs/blackboxing @ IonuțG.Stanまたはmods 、ブラックボックスへの参照を使用して回答を更新できますか?この回答に関連しています。
Chris Hynes、2016

47

Chromeのインスペクタを使用して、次のように別の方法で添付されたイベントを見つけることもできます。

  1. 検査する要素を右クリックするか、「要素」ペインで検索します。
  2. 次に、「イベントリスナー」タブ/ペインで、イベントを展開します(「クリック」など)。
  3. さまざまなサブノードを展開して目的のサブノードを見つけ、「ハンドラー」サブノードの場所を探します。
  4. 「関数」という単語を右クリックして、「関数定義を表示」をクリックします。

これにより、次の画像に示すようにハンドラーが定義された場所に移動し、ポールアイリッシュによってここで説明されています。

「関数定義を表示」


2歳、まだこの質問への最良の答え。
スチュアート

16

インストール後、jQuery監査拡張機能(https://chrome.google.com/webstore/detail/jquery-audit/dhhnpbajdcgdmbbcoakfhmfgmemlncjg)を試してみてください。インストール後、次の手順に従います。

  1. 要素を検査する
  2. 新しい「jQuery Audit」タブで、イベントプロパティを展開します
  3. 必要なイベントを選択してください
  4. ハンドラープロパティから、関数を右クリックし、[ 関数定義表示 ]を選択します。
  5. イベントバインディングコードが表示されます。
  6. コードをより読みやすく表示するには、[ プリティプリント ]ボタンをクリックします。

1
これは優れた拡張機能であり、JavaScriptを使用して時間をかける時間を節約できます。
Neil Monroe

「イベントリスナー」に「イベントリスナーがありません」と表示され、「イベントリスナーのブレークポイント」>マウス>をクリックしてもブレークポイントが作成されないことがよくあります。このプラグインは非常にうまく機能します。
StuartN 2015年

@Javier>それは素晴らしい反応です。javascript(非jQuery)メカニズムで動作しますか?
Mahefa

11

(2020年現在最新)バージョンChromeバージョン83.0.4103.61の場合

Chromeデベロッパーツール-イベントリスナー

  1. 検査する要素を選択してください

  2. [イベントリスナー]タブを選択します

  3. フレームワークリスナーをチェックして、jquery関数の代わりに実際のJavaScriptファイルを表示してください。


6

編集:私自身の答えの代わりに、これは非常に優れています:Firebug(または同様のツール)でJavaScript / jQueryイベントバインディングをデバッグする方法

Google Chrome開発者ツールには、スクリプトセクションに組み込まれた検索機能があります

このツールに慣れていない場合:(念のため)

  • ページの任意の場所を右クリック(クロム)
  • 「要素の検査」をクリックします
  • [スクリプト]タブをクリックします
  • 右上の検索バー

#IDのクイック検索を実行すると、最終的にバインディング関数に移動するはずです。

例:を検索する#fooと、

$('#foo').click(function(){ alert('bar'); })

ここに画像の説明を入力してください


4
素敵なスタートですが、#fooへの1500の参照があり、そのほとんどが何もバインドしていない場合、または現在のケースでトリガーされない外部スクリプトに複数の#foo IDがある場合はどうなりますか?
FMaz008

すばらしい質問です。私の経験では、人間のデバッグプロセスが通常はここから始まります:)
Michael Jasper

1
Hehe、あなたは正しいですが、私の質問は私が人間として何をしなければならないかについてもありました:p
FMaz008

6

2018年の更新-今後の読者に役立つかもしれません:

これが最初にChromeで導入された時期はわかりません。ただし、Chromeでこれを行うことができる別の(簡単な)方法は、コンソールコマンドを使用することです。

例:Chromeコンソールタイプの場合

getEventListeners($0)

一方、$ 0はDOMで選択された要素です。

https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference#0_-_4

ここに画像の説明を入力してください


4

findEventHandlersはjqueryプラグインです。未加工のコードはこちらです:https ://raw.githubusercontent.com/ruidfigueiredo/findHandlersJS/master/findEventHandlers.js

手順

  1. 生のコードを直接Chromeのコンソールに貼り付けます(注:jqueryがすでにロードされている必要があります)

  2. 次の関数呼び出しを使用して findEventHandlers(eventType, selector);
    、対応するセレクタの指定された要素のeventTypeハンドラを検索します。

findEventHandlers("click", "#clickThis");

次に、使用可能なイベントハンドラーが下に表示されます。展開してハンドラーを見つけ、関数を右クリックして選択する必要があります。 show function definition

参照:https : //blinkingcaret.wordpress.com/2014/01/17/quickly-finding-and-debugging-jquery-event-handlers/


3

Chromeバージョン52.0.2743.116の場合:

  1. ChromeのデベロッパーツールでCtrl+ Shift+を押して[検索]パネルを表示しFます。

  2. 検索しようとしている要素の名前を入力します。

バインドされた要素の結果がパネルに表示され、それらが配置されているファイルが示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.