如何查找委派的事件监听器?

时间:2014-07-14 10:03:55

标签: javascript jquery jquery-delegate

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

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

但是,这并未显示通过委派添加的事件侦听器,例如

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

一种显而易见的方法是遍历DOM树,看看是否有任何父母将事件委托给手头的元素,同时调用$('selector').parent().data('events')直到找不到父母,但是这不会让我觉得非常有效或标准的做事方式,我认为这种问题太常见,不能有更好的解决方案。

如何查找所有事件监听器,包括委托监听器?

1 个答案:

答案 0 :(得分: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;
}