を介して要素にハンドラーを配置する場合$.on()
、ターゲットしかない場合にデリゲートされたイベントを見つける方法はありますか?
元:
$('body').on('click', '#myLink', function(){ doStuff() });
...
$('#myLink').eventsFromOn();
イベントにデリゲート イベント データがある場合、実際にはデリゲートされたイベントではなくなるため、これは奇妙に思えますが、質問する価値はあります...
ありがとう!
を介して要素にハンドラーを配置する場合$.on()
、ターゲットしかない場合にデリゲートされたイベントを見つける方法はありますか?
元:
$('body').on('click', '#myLink', function(){ doStuff() });
...
$('#myLink').eventsFromOn();
イベントにデリゲート イベント データがある場合、実際にはデリゲートされたイベントではなくなるため、これは奇妙に思えますが、質問する価値はあります...
ありがとう!
ハンドラーデータを探している場合、十分に努力すれば、文書化されていない情報でそれを見つけることができるように見えます。文書化されていないevents
データオブジェクトには、キー、、、type
およびhandler
—重要なことに—がありselector
ます。したがって、から始めると、祖先の各レベルのデータを調べて、trueである目的のイベントに一致するものを#mylink
探すことができます。events
$("#mylink").is(selector)
たとえば、次のHTMLでは次のようになります。
<body>
<div id="mylink">click me</div>
</body>
実行すると
$("body").on("click", "#mylink", function() {
// Anything
});
次に、これを行います。
var level = $("#mylink");
while (level[0]) {
console.dir(level.data('events'));
level = level.parent();
}
私はこれを手に入れます:
未定義 プロパティなし 物体 クリック:Array [1] 0:オブジェクト データ:未定義 GUID:1 ハンドラー:関数(){ 名前空間: "" origType:「クリック」 クイック:配列[4] セレクター:「#mylink」 タイプ:「クリック」 __proto__:オブジェクト デリゲートカウント:1 長さ:1 __proto__:配列[0] __proto__:オブジェクト 未定義 プロパティなし
ご覧のとおり、click
ハンドラーは要素body
にselector
一致するものがあります#mylink
。