jQuery不允许您仅访问给定元素的事件。您可以使用未记录的内部方法访问它们
$._data(element, "events")
但是它仍然不会为您提供所有事件,确切地说,不会向您显示分配有
$([selector|element]).on()
这些事件存储在文档中,因此您可以通过浏览来获取它们
$._data(document, "events")
但这是一项艰苦的工作,因为整个网页都有很多活动。
Tom G上面创建了一个函数,该函数仅针对给定元素的事件过滤文档并合并这两种方法的输出,但是它具有在输出中复制事件的缺陷(并有效地使元素的jQuery内部事件列表与应用程序发生了混乱)。我已修复该缺陷,您可以在下面找到代码。只需将其粘贴到开发控制台或应用程序代码中,然后在需要时执行它即可获得给定元素的所有事件的完整列表。
需要注意的是,元素实际上是HTMLElement,而不是jQuery对象。
function getEvents(element) {
var elemEvents = $._data(element, "events");
var allDocEvnts = $._data(document, "events");
function equalEvents(evt1, evt2)
{
return evt1.guid === evt2.guid;
}
for(var evntType in allDocEvnts) {
if(allDocEvnts.hasOwnProperty(evntType)) {
var evts = allDocEvnts[evntType];
for(var i = 0; i < evts.length; i++) {
if($(element).is(evts[i].selector)) {
if(elemEvents == null) {
elemEvents = {};
}
if(!elemEvents.hasOwnProperty(evntType)) {
elemEvents[evntType] = [];
}
if(!elemEvents[evntType].some(function(evt) { return equalEvents(evt, evts[i]); })) {
elemEvents[evntType].push(evts[i]);
}
}
}
}
}
return elemEvents;
}