0

を介して要素にハンドラーを配置する場合$.on()、ターゲットしかない場合にデリゲートされたイベントを見つける方法はありますか?

元:

$('body').on('click', '#myLink', function(){ doStuff() });

...

$('#myLink').eventsFromOn();

イベントにデリゲート イベント データがある場合、実際にはデリゲートされたイベントではなくなるため、これは奇妙に思えますが、質問する価値はあります...

ありがとう!

4

1 に答える 1

2

ハンドラーデータを探している場合、十分に努力すれば、文書化されていない情報でそれを見つけることができるように見えます。文書化されていない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ハンドラーは要素bodyselector一致するものがあります#mylink

于 2012-05-18T21:52:32.527 に答える