0

通常在我正在使用的那个 DOM 节点上获取侦听器

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

但是,这不会显示通过委托添加的事件侦听器,例如

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

一种明显的方法是遍历 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 回答