Chrome と自分のウェブサイトを使用しています。
内部から私が知っていること:
1 ) オレンジ色の画像ボタンをクリックしてサインアップするフォームがあります。
2 ) 調べてみると、次のとおりです。<img class="formSend" src="images/botoninscribirse2.png">
3 ) ソースコードの先頭には、大量のスクリプトソースがあります。ボタンがどのスクリプトを呼び出すかは、私がコーディングしたのでわかります。<script src="js/jquery2.js" type="text/javascript"></script>
4 ) そのファイル内には、$(".formSend").click(function() { ... });
ボタンによってトリガーされるもの (かなり複雑なフォーム検証を実行して送信する) があり、どの Web サイトでも Chrome 開発ツールを使用してそれを見つけられるようにしたいと考えています。
要素がどこで呼び出されるかを知るにはどうすればよいですか?
リスナー タブは機能しませんでした。そこで、クリック イベント リスナーを探してみました。これは安全な方法のように思えますが、jquery2.js
そこには何もありませんでした (コードがどのファイルにあるかは実際にはわからないため、これらすべてを確認するのは時間の無駄です...)。
$(".formSend").click(function() { ... });
ファイル内の関数がjquery2.js
そこにありません。
ジェシー理由を説明します:
「最後に、関数がクリック イベント ハンドラーに直接バインドされない理由は、jQuery がバインドされる関数を返すためです。jQuery の関数は、次にいくつかの抽象化レイヤーとチェックを通過し、そのどこかで関数を実行します。」
皆さんの提案に従って、私は効果があった方法を集めました下の回答の1つ。
ベストアンサー1
アレクサンダー・パブロフの答えあなたが望むものに最も近づきます。
jQueryの抽象化と機能の広範さのため、イベントの核心にたどり着くには多くのハードルを乗り越えなければなりません。私はこれを設定しましたjsFiddle作品をデモンストレーションする。
1. イベントリスナーブレークポイントの設定
これに近かったですね。
2. ボタンをクリックして下さい。
Chrome Dev Tools はスクリプトの実行を一時停止し、縮小されたコードの美しい組み合わせを表示します。
3. 素晴らしいコードを見つけましょう!
ここでのコツは、キーを押すことに夢中にならず、画面に注意を払うことです。
- F11目的のソースコードが表示されるまでキー(ステップイン)を押します
- ついにソースコードに到達
- の中にjsFiddle上記のサンプルでは、目的のイベントハンドラ/関数に到達するまでにF11 108回押す必要がありました。
- イベントをバインドするために使用されるjQuery(またはフレームワークライブラリ)のバージョンに応じて、結果は異なる場合があります。
- 十分な時間と労力を費やせば、どんなイベントハンドラや関数でも見つけることができる。
4. 説明
jQuery がなぜ多くの抽象化レイヤーを通過するのか、正確な答えや説明はわかりません。私が示唆できるのは、コードを実行するブラウザーから jQuery の使用を抽象化する役割があるためだということです。
がここにありますjsFiddlejQuery のデバッグ バージョン (つまり、縮小されていないバージョン) を使用します。最初の (縮小されていない) ブレークポイントのコードを確認すると、コードがさまざまな処理を行っていることがわかります。
// ...snip...
if ( !(eventHandle = elemData.handle) ) {
eventHandle = elemData.handle = function( e ) {
// Discard the second event of a jQuery.event.trigger() and
// when an event is called after a page has unloaded
return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
jQuery.event.dispatch.apply( elem, arguments ) : undefined;
};
}
// ...snip...
「実行が一時停止し、行ごとにジャンプする」というエラーが発生したときに、それを見逃したと思う理由は、ステップインではなく「ステップオーバー」機能を使用したためかもしれません。ここにStackOverflowの回答違いを説明します。
最後に、関数がクリック イベント ハンドラーに直接バインドされない理由は、jQuery がバインドされる関数を返すためです。jQuery の関数は、いくつかの抽象化レイヤーとチェックを通過し、そのどこかで関数を実行します。