通常我使用
来获取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;
}