私は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 devツールを使用する。
要素がどこを呼び出しているのか、どうすればわかりますか。
それで私は私にとって安全な賭けのように思えたclickイベントリスナーを見てみました...しかしそこにはjquery2.js
がありません(そして私は実際にこれらのファイルをチェックする時間を浪費するでしょう)。 ..):
jquery2.js
ファイル内の私の$(".formSend").click(function() { ... });
関数はそこにはありません。
"最後に、関数がclickイベントハンドラに直接バインドされていないのは、jQueryがバインドされた関数を返すためです。jQueryの関数は抽象化層をいくつか通過してチェックし、そこで実行します。関数。"
編集: 私はこの質問が出たすべての方法を集めました 以下の一つの答えで あなたの何人かが示唆したように。
ほんの少しだけセットアップするだけで、サードパーティはできません。
編集:このソリューションを書いて以来、Chrome(そして他のブラウザでも大丈夫だと思います)はスクリプトをブラックボックス化するのをより簡単にしました。
スクリプトをブラックボックス化するとどうなりますか。
ライブラリコードからスローされた例外は一時停止しません(例外時に一時停止が有効になっている場合)。ライブラリコードに割り込まないでください。デバッガは、ライブラリコードに設定されたブレークポイントで一時停止しません。最終的な結果は、サードパーティのリソースではなくアプリケーションコードをデバッグしていることです。
更新されたワークフローは次のとおりです。
jquery\..*\.js
( human 翻訳:jquery.*.js
)jquery\..*\.js|include\.postload\.js
のようにパイプ文字を使ってそれらを追加することができます。または単に「追加」ボタンでそれらを追加し続けてください。ボーナスのヒント: Regex 101 (他にもたくさんあります)を使ってさびた正規表現パターンをすばやくテストし、正規表現のステップバイステップデバッガのどこが悪いのかを調べてください。
ソースパネルで作業するときにコンテキストメニューを使用することもできます。ファイルを表示しているときは、エディタを右クリックすることができます。ファイルナビゲータでファイルを右クリックすることもできます。そこからBlackbox Scriptを選択します。これにより、設定パネルのリストにファイルが追加されます。
この種の痛みを伴うが簡単です(ブラックボックス化は、ここで非常にうれしいことがわかります)。
Dev Tools - > Sourcesタブを開き、右側にEvent Listener Breakpoints
を見つけます。
Mouse
を展開し、... click
をクリックします。
私はいつも残っている ⌘+⌥+F または
そして#envio
を検索するか、あなたがパーティーを始めようと思っているタグ/クラス/ IDを検索してください すべての発見を読んでコードが実行される可能性があることを考えてみてください ボタンによって何がトリガーされます。
しかし、img
だけでなく、何千ものdivs
が重複していることもあるので注意してください。コードが何をトリガーしているのかさえわかりません。おそらくこの方法を使う必要はないはずです。
Alexander Pavlov's answer あなたが望むものに最も近いものを取得します。
JQueryの抽象化と機能性の広さのせいで、イベントの本質に到達するためにはたくさんのフープを飛ばさなければなりません。私はこれを設定しました jsFiddle 作品をデモンストレーションするために。
あなたはこれに近かった。
Chrome Dev Toolsはスクリプトの実行を一時停止し、縮小されたコードの美しい絡み合いを紹介します。
さて、ここでのトリックはキーを押すことに夢中にならず、そして画面を見ないようにすることです。
正確な答えも、jQueryが抽象化の何層にもわたる理由についての説明もありません - 私が提案できるのは、コードを実行しているブラウザから使用方法を抽象化するのは仕事のせいだということです。 。
これは、jQueryのデバッグバージョンを含む jsFiddle です(つまり、縮小されません)。最初の(縮小されていない)ブレークポイントのコードを見ると、コードが多くのことを処理していることがわかります。
// ...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...
""実行が一時停止していて、1行ずつジャンプして"としたときに失敗したと思うのは、" Step Over "関数を使用した可能性があるからです。ステップインの代わりに。これが違いを説明する StackOverflow answer です。
最後に、関数がclickイベントハンドラに直接バインドされているnotである理由は、jQueryがバインドされた関数を返すためです。 jQueryの関数は抽象化層をいくつか調べてチェックし、そこにsomewhereがあると関数を実行します。
"...のように聞こえます..." の部分は間違っています。あなたはStepOverですか、それともStepInですか?また、関連する電話を誤って見逃していないと思いますか。
とはいえ、フレームワークのデバッグはまさにこの理由で面倒なことがあります。問題を軽減するには、 "フレームワークデバッグサポートを有効にする"実験を有効にする _を実行します。ハッピーデバッグ! :)
findHandlersJSを使用できます。
あなたはクロームコンソールですることによってハンドラを見つけることができます:
findEventHandlers("click", "img.envio")
次の情報がchromeのコンソールに表示されます。
このソリューションは jQueryのデータメソッド を必要とします。
$._data($(".example").get(0), "events")
を実行する$._data()
は、jQueryのデータメソッドにアクセスしているだけです。もっと読みやすい方法はjQuery._data()
です。
this SO answer :による興味深いポイント
JQuery 1.8以降、イベントデータはデータ用の「public API」から利用できなくなりました。 このjQueryブログ投稿 を読んでください。代わりにこれを使用してください。
jQuery._data( elem, "events" );
elemはjQueryオブジェクトやセレクタではなくHTML要素であるべきです。注意してください、これは内部の 'プライベート'構造であり、変更するべきではありません。デバッグ目的でのみ使用してください。
古いバージョンのjQueryでは、古いメソッドを使う必要があるかもしれません。
jQuery( elem ).data( "events" );
バージョンにとらわれないjQueryは次のようになります。(jQuery._data || jQuery.data)(elem, 'events');