如何查找委托的事件侦听器



通常我使用

来获取DOM节点上的侦听器
$('selector').data('events');

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

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

一种明显的方法是遍历DOM树并查看是否有任何父节点正在将事件委托给手头的元素,通过并发调用$('selector').parent().data('events')直到找不到父节点为止,然而这并不是我认为非常有效或标准的做事方式,我认为这种问题太常见了,没有更好的解决方案。

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

我使用下面的函数,不是很优雅,但是节省了我很多时间。

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;
}

相关内容

  • 没有找到相关文章

最新更新