Могу ли я найти события, связанные с элементом с jQuery?
Я связываю два обработчика событий по этой ссылке:
<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"
?
Ответы
Ответ 1
В современных версиях 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
):
![Console output for $._]()
Затем в Chrome вы можете щелкнуть правой кнопкой мыши функцию обработчика и нажать "Просмотр функции определения", чтобы показать вам точное место, где оно определено в вашем коде.
Ответ 2
Общий случай:
- Нажмите F12, чтобы открыть Dev Tools
- Перейдите на вкладку "
Sources
" - С правой стороны прокрутите список до
Event Listener Breakpoints
и разверните дерево - Нажмите на события, которые вы хотите прослушать.
- Взаимодействуйте с целевым элементом, если они срабатывают, вы получите точку останова в отладчике
Аналогичным образом вы можете:
- щелкните правой кнопкой мыши на целевом элементе → выберите "
Inspect element
" - Прокрутите вниз по правой стороне рамки dev, внизу - "
event listeners
". - Разверните дерево, чтобы узнать, какие события связаны с элементом. Не уверен, что это работает для событий, которые обрабатываются через пузыри (я предполагаю, что нет)
Ответ 3
Я добавляю это для потомков; Там более простой способ, который не требует написания более JS. Используя удивительный аддон firebug для firefox,
- Щелкните правой кнопкой мыши элемент и выберите "Осмотреть элемент с помощью Firebug"
- На панелях боковой панели (показано на скриншоте) перейдите на вкладку событий с помощью крошечной стрелки
- На вкладке "События" отображаются события и соответствующие функции для каждого события
- Рядом с ним отображается местоположение функции
![введите описание изображения здесь]()
Ответ 4
Плагин jQuery Audit plugin должен позволить вам сделать это через обычные инструменты Chrome Dev. Это не идеально, но это должно позволить вам увидеть фактического обработчика, связанного с элементом/событием, а не только с общим обработчиком jQuery.
Ответ 5
Я использовал что-то вроде этого if ($._ data ($ ( "a.wine-item-link" ) [0]). events == null) {... что-то сделать, в значительной степени привязать обработчики событий снова }, чтобы проверить, привязан ли мой элемент к какому-либо событию. Он все равно скажет undefined (null), если вы отключили все обработчики событий от этого элемента. Вот почему я оцениваю это в выражении if.
Ответ 6
Хотя это не совсем специфично для селекторов/объектов jQuery, в FireFox Quantum 58.x вы можете найти обработчики событий для элемента с помощью инструментов Dev:
- Щелкните элемент правой кнопкой мыши
- В контекстном меню нажмите "Осмотреть элемент",
- Если рядом с элементом есть значок "ev", нажмите значок "ev"
- Отображает все события для этого элемента и обработчика событий.
![FF Quantum Dev Tools]()
Ответ 7
Теперь вы можете просто получить список прослушивателей событий, связанных с объектом, используя функцию javascript getEventListeners().
Например, введите следующую команду в консоль инструментов dev:
// Get all event listners bound to the document object
getEventListeners(document);
Ответ 8
Когда я передаю немного сложный запрос DOM для данных $._ следующим образом: $._data($('#outerWrap .innerWrap ul li:last a'), 'events')
он выдает undefined в консоли браузера.
Поэтому мне пришлось использовать $._ данные в родительском div: $._data($('#outerWrap')[0], 'events')
, чтобы увидеть события для тегов. Вот JSFiddle для того же: http://jsfiddle.net/giri_jeedigunta/MLcpT/4/
Ответ 9
Обратите внимание, что события могут быть прикреплены к самому документу, а не к рассматриваемому элементу. В этом случае вы захотите использовать:
$._data( $(document)[0], "events" );
И найдите событие с правильным селектором:
![enter image description here]()
А затем посмотрите на обработчик > [[FunctionLocation]]
![enter image description here]()