Я связываю два обработчика событий по этой ссылке:
<a href='#' id='elm'>Show Alert</a>
JavaScript:
$(function()
{
$('#elm').click(_f);
$('#elm').mouseover(_m);
});
function _f(){alert('clicked');}
function _m(){alert('mouse over');}
Есть ли способ получить список всех событий, связанных с элементом, в этом случае на элементе с id="elm"
?
В современных версиях jQuery вы должны использовать метод $._data
для поиска любых событий, связанных jQuery с данным элементом. Обратите внимание, что это метод только для внутреннего использования:
// Bind up a couple of event handlers
$("#foo").on({
click: function(){ alert("Hello") },
mouseout: function(){ alert("World") }
});
// Lookup events for this particular Element
$._data( $("#foo")[0], "events" );
Результат из $._data
будет объектом, который содержит оба события, которые мы установили (на фото ниже с расширением свойства mouseout
):
Затем в Chrome вы можете щелкнуть правой кнопкой мыши функцию обработчика и нажать "Просмотр функции определения", чтобы показать вам точное место, где оно определено в вашем коде.
Общий случай:
Sources
"Event Listener Breakpoints
и разверните деревоАналогичным образом вы можете:
Inspect element
"event listeners
".Я добавляю это для потомков; Там более простой способ, который не требует написания более JS. Используя удивительный аддон firebug для firefox,
Плагин jQuery Audit plugin должен позволить вам сделать это через обычные инструменты Chrome Dev. Это не идеально, но это должно позволить вам увидеть фактического обработчика, связанного с элементом/событием, а не только с общим обработчиком jQuery.
Теперь вы можете просто получить список прослушивателей событий, связанных с объектом, используя функцию javascript getEventListeners().
Например, введите следующую команду в консоль инструментов dev:
// Get all event listners bound to the document object
getEventListeners(document);
Хотя это не совсем специфично для селекторов/объектов jQuery, в FireFox Quantum 58.x вы можете найти обработчики событий для элемента с помощью инструментов Dev:
Я использовал что-то вроде этого if ($._ data ($ ( "a.wine-item-link" ) [0]). events == null) {... что-то сделать, в значительной степени привязать обработчики событий снова }, чтобы проверить, привязан ли мой элемент к какому-либо событию. Он все равно скажет undefined (null), если вы отключили все обработчики событий от этого элемента. Вот почему я оцениваю это в выражении if.
Обратите внимание, что события могут быть прикреплены к самому документу, а не к рассматриваемому элементу. В этом случае вы захотите использовать:
$._data( $(document)[0], "events" );
И найдите событие с правильным селектором:
А затем посмотрите на обработчик > [[FunctionLocation]]
Когда я передаю немного сложный запрос DOM для данных $._ следующим образом: $._data($('#outerWrap .innerWrap ul li:last a'), 'events')
он выдает undefined в консоли браузера.
Поэтому мне пришлось использовать $._ данные в родительском div: $._data($('#outerWrap')[0], 'events')
, чтобы увидеть события для тегов. Вот JSFiddle для того же: http://jsfiddle.net/giri_jeedigunta/MLcpT/4/
$('#outerWrap')
. События на самом деле связаны с этим элементом, а не с отдельными якорями.