かなり複雑で面倒な _ dom _ の操作を行うには、jQueryを使用するWebアプリケーションをデバッグする必要があります。ある時点では、特定の要素にバインドされていたイベントのいくつかは発生せず、単に動作を停止します。
アプリケーションのソースを編集する機能がある場合は、問題を特定するためにドリルダウンして多数の Firebugconsole.log()
ステートメントとコメント/コメント解除コードを追加します。しかし、アプリケーションコードを編集することはできず、Firebugまたは同様のツールを使用して完全にFirefoxで作業する必要があるとしましょう。
Firebugは、DOMをナビゲートして操作させるのに非常に優れています。しかし、これまでのところ、Firebugを使用してイベントをデバッグする方法を理解することはできませんでした。具体的には、特定の時点で特定の要素にバインドされているイベントハンドラのリストを確認したいだけです(Firebug JavaScriptブレークポイントを使用して変更を追跡します)。しかし、Firebugにはバインドされたイベントを表示する機能がないか、それを見つけることができません。 :-)
何かアドバイスやアイデア?理想的には、今日DOMを編集する方法と同じように、要素にバインドされたイベントを見て編集したいだけです。
DOMノードでイベントリスナーを見つける方法 を参照してください。
一言で言えば、ある時点でイベントハンドラがあなたの要素にアタッチされていると仮定します(例):$('#foo').click(function() { console.log('clicked!') });
あなたはそれをこんな感じで調べます:
jQuery 1.3.x
var clickEvents = $('#foo').data("events").click;
jQuery.each(clickEvents, function(key, value) {
console.log(value) // prints "function() { console.log('clicked!') }"
})
jQuery 1.4.x
var clickEvents = $('#foo').data("events").click;
jQuery.each(clickEvents, function(key, handlerObj) {
console.log(handlerObj.handler) // prints "function() { console.log('clicked!') }"
})
jQuery.fn.data
を参照してください(jQueryはハンドラーを内部に格納します)。
jQuery 1.8.x
var clickEvents = $._data($('#foo')[0], "events").click;
jQuery.each(clickEvents, function(key, handlerObj) {
console.log(handlerObj.handler) // prints "function() { console.log('clicked!') }"
})
Visual Event という名前のNiceブックマークレットがあり、これは要素に付随するすべてのイベントを表示することができます。さまざまな種類のイベント(マウス、キーボードなど)に合わせて色分けされたハイライトがあります。カーソルを合わせると、イベントハンドラの本文、添付方法、およびファイル/行番号(WebKitとOperaの場合)が表示されます。手動でイベントをトリガーすることもできます。
どのイベントハンドラが要素に添付されているかを調べる標準的な方法がないため、すべてのイベントを見つけることはできませんが、jQuery、Prototype、MooTools、YUIなどの一般的なライブラリで動作します。
Eventbugエクステンションは昨日リリースされました。参照: http://www.softwareishard.com/blog/firebug/eventbug-alpha-released/ /
FireQuery を使用できます。 Firebugの[HTML]タブでDOM要素に関連付けられているすべてのイベントが表示されます。また、$.data
を介して要素に添付されたデータも表示されます。
これは与えられた要素/イベントのためのすべてのイベントハンドラをリストすることができるプラグインです:
$.fn.listHandlers = function(events, outputFunction) {
return this.each(function(i){
var elem = this,
dEvents = $(this).data('events');
if (!dEvents) {return;}
$.each(dEvents, function(name, handler){
if((new RegExp('^(' + (events === '*' ? '.+' : events.replace(',','|').replace(/^on/i,'')) + ')$' ,'i')).test(name)) {
$.each(handler, function(i,handler){
outputFunction(elem, '\n' + i + ': [' + name + '] : ' + handler );
});
}
});
});
};
このように使用してください。
// List all onclick handlers of all anchor elements:
$('a').listHandlers('onclick', console.info);
// List all handlers for all events of all elements:
$('*').listHandlers('*', console.info);
// Write a custom output function:
$('#whatever').listHandlers('click',function(element,data){
$('body').prepend('<br />' + element.nodeName + ': <br /><pre>' + data + '<\/pre>');
});
Src:(私のブログ) - > http://james.padolsey.com/javascript/debug-jquery-events-with-listhandlers/ /
WebKit開発者コンソール(Chrome、Safariなどにあります)を使用すると、要素に添付されたイベントを表示できます。
Jquery 1.7以降では$._data(htmlElement, "events")
を使ってください。
例:
$._data(document, "events")
または$._data($('.class_name').get(0), "events")
同僚が示唆しているように、console.log> alert:
var clickEvents = $('#foo').data("events").click;
jQuery.each(clickEvents, function(key, value) {
console.log(value);
})
jQueryはイベントを次の場所に格納します。
$("a#somefoo").data("events")
console.log($("a#somefoo").data("events"))
を実行すると、その要素に関連付けられているイベントが一覧表示されます。
最新のChromeでDevToolsを使用する(v29)イベントをデバッグするには、次の2つのヒントが非常に役に立ちます。
$ ._ data( $ 0 、 "events")// jQueryを1.7以降と仮定
monitorEvents ()コマンドを使用する
私は jQuery Debugger をクロムストアで見つけました。 DOMアイテムをクリックすると、それにバインドされているすべてのイベントがコールバック関数とともに表示されます。イベントが正しく削除されていないアプリケーションをデバッグしていたので、数分で追跡できました。明らかにこれはクロムのためのもので、Firefoxのものではありません。
FireBugのクルーがEventBugの拡張機能に取り組んでいるようです。 FireBugにもう1つのパネル - イベントが追加されます。
「イベントパネルには、イベントタイプごとにグループ化されたページ上のすべてのイベントハンドラが一覧表示されます。各イベントタイプごとに、リスナーがバインドされている要素と関数ソースの概要を表示できます。」 EventBug Rising
それがいつリリースされるのか、彼らは今は言えませんが。
ev
アイコンの横にあるアイコン
Firefox開発者ツールのインスペクタパネル内に、要素にバインドされているすべてのイベントが一覧表示されます。
まず要素を選択します Ctrl + Shift + C例えば、 Stack Overflowの上向きの矢印。
要素の右側にあるev
アイコンをクリックすると、ダイアログが開きます。
必要なイベントの一時停止記号||
シンボルをクリックすると、ハンドラの行にデバッガが開きます。
行の左マージンをクリックして、デバッガの通常どおりにブレークポイントを配置できます。
これについては、 https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_event_listeners に記載されています。
残念なことに、私はこれがきれいにうまくいく方法を見つけることができませんでした、それはちょうど縮小行で開くようです: Firefox/FirebugでJavascriptとCSSを美しくする方法は?
Firefox 42でテスト済み.
このスレッド によると、FirebugにはDOM要素のリスナーにどのイベントが添付されているのかを表示する方法はありません。
あなたができる最善の方法は、tj111が示唆していることか、あるいはHTMLビューアでその要素を右クリックして "Log Events"をクリックすることです。どのイベントcouldが特定の関数を起動しているのかを見るためにそれを行うことができると思います。
バージョン2.0では、Firebugは Eventsパネル を導入しました。これは 内で現在選択されている要素のすべてのイベントをリストします_ html _パネル 。
オプションShow Wrapped Listenersがチェックされている場合、jQueryイベントバインディングにラップされたイベントリスナーを表示することもできます。これは イベントパネルのオプションメニュー 。
そのパネルで、イベントハンドラーをデバッグするワークフローは次のとおりです。
=>スクリプトの実行はイベントハンドラー関数の最初の行で停止し、ステップデバッグできます。
Firebug 2 はDOMイベントのデバッグ/検査を組み込んでいます。