jQuery не позволяет вам просто получить доступ к событиям для данного элемента. Вы можете получить к ним доступ, используя недокументированный внутренний метод
$._data(element, "events")
Но он все равно не даст вам все события, а точнее не покажет вам события, назначенные с
$([selector|element]).on()
Эти события хранятся внутри документа, поэтому вы можете получить их, просматривая
$._data(document, "events")
но это тяжелая работа, поскольку есть события для всей веб-страницы.
Том Г создал созданную функцию, которая фильтрует документ только по событиям данного элемента и объединяет выходные данные обоих методов, но у него есть недостаток дублирования событий в выходных данных (и, по сути, из-за того, что внутренний список событий 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;
}