0

通常、私が使用しているDOMノードでリスナーを取得するには

$('selector').data('events');

ただし、委任によって追加されているイベント リスナーは表示されません。

$(document).on('click', 'selector', handlerFunction) 

明らかな方法の 1 つは、DOM ツリーをたどり、親が見つからなくなるまで同時に呼び出して、いずれかの親が手元の要素にイベントを委譲しているかどうかを調べる$('selector').parent().data('events')ことですが、これは非常に効率的または標準的な方法とは思えません。そして、この種の問題はあまりにも一般的であり、より良い解決策がないのではないかと思います.

委任されたものを含むすべてのイベントリスナーを見つける方法は?

4

1 に答える 1

0

ATM 以下の関数を使用していますが、エレガントではありませんが、かなりの時間を節約できます。

var getAllEventListeners = function (options) {
    if (options.internalArr == undefined)
        options.internalArr = [];
    if (options.elements.data('events') != undefined) {
        options.internalArr.push({
            elements: options.elements,
            events: options.elements.data('events')
        });
    }
    if (options.elements.parent().length != 0) {
        getAllEventListeners({
            elements: options.elements.parent(),
            internalArr: options.internalArr
        });
    }
}

var findAllListeners = function (selector) {
    var opt = {
        elements: $(selector),
        internalArr: []
    };
    getAllEventListeners(opt);
    return opt.internalArr;
}
于 2015-05-19T09:08:24.740 に答える