更新:プロトタイプのDOMノードでイベントリスナーを見つける方法
-
07-07-2019 - |
質問
Prototype 1.6+ではEvent.observersは使用されなくなったようです(おそらくメモリリークを回避するため)。どのイベントリスナーが要素にアタッチされているのかを追跡するにはどうすればよいですか。
Firebugには「次のブレーク」があります。ボタン、ただし、別の特定の要素で必要な動作に到達する前に実行するbody要素のマウスリスナーがいくつかあるので、他の方法がありますか?
解決
回答を更新しましたリンク先バージョン 1.6.0
から 1.6.1
への変更を考慮した、より包括的な Prototype
カバレッジを備えています。
その間に非常に乱雑になりましたが、1.6.1はややきれいです:
var handler = function() { alert('clicked!') };
$(element).observe('click', handler);
// inspect
var clickEvents = element.getStorage().get('prototype_event_registry').get('click');
clickEvents.each(function(wrapper){
alert(wrapper.handler) // alerts "function() { alert('clicked!') }"
})
他のヒント
要素ストレージを介してルーティングされるようになりました:)
Element.getStorage(yourElement).get( 'prototype_event_registry')
は、Prototypeの Hash
のインスタンスを提供するため、ハッシュを使用して何でもできます。 。
// to see which event types are being observed
Element.getStorage(yourElement).get('prototype_event_registry').keys();
// to get array of handlers for particular event type
Element.getStorage(yourElement).get('prototype_event_registry').get('click');
// to get array of all handlers
Element.getStorage(yourElement).get('prototype_event_registry').values();
// etc.
これらは文書化されていない内部詳細であり、将来変更される可能性があることに注意してください。したがって、おそらくデバッグ目的以外はそれらに依存しません。
所属していません StackOverflow