2012-06-07 2 views
13

Я до сих пор не могу поверить, что это невозможно, но есть способ пропустить через dom и просмотреть все обработчики событий, подключенные с помощью 'addEventListener'. This post и многие другие говорят «нет».Как найти прослушивателей событий на узле DOM с помощью JavaScript

Если это так, то как показывают такие приложения, как инспектор Chrome или Firebug, что они делают? Я думаю, они, вероятно, каким-то образом дополняют методы dom, чтобы они могли отслеживать, что связано.

+0

Где вы видите прослушиватели событий в Chrome или Firebug? –

+0

Да, я хотел бы знать, где вы их видите! Я загрузил плагины для Firebug, которые показывают их, но вы, вероятно, правы, что они каким-то образом отслеживают прослушиватели событий, когда они привязаны. – Ian

+1

В хромовом веб-инспекторе нажмите на вкладку «Элементы» наверху. это один самый дальний слева. Выберите элемент в dom, а затем с правой стороны появится список информации об элементе, который вы выбрали как «Стили», «Свойства» и т. Д. Последний в списке - «Слушатели событий», и он дает вам всю необходимую информацию. Но вы можете видеть информацию только для каждого выбранного элемента, а не для всего DOM. Hense меня задавая вопрос :) – screenm0nkey

ответ

4

Конечно, у браузеров внутри есть список прослушивателей событий, но он не подвергается JavaScript на уровне страницы. Например, Firebug (или Eventbug), вероятно, использует nsIEventListenerInfo.

Это, как говорится, этот старый ответ еще держит:
How to find event listeners on a DOM node?

+0

Хороший ответ человек. Большое спасибо. – screenm0nkey

25

Консоль Chrome имеет метод, который может помочь вам проверить, если узел дом имеет каких-либо обработчиков событий, зарегистрированных, например, для проверки слушателей событий, присоединенных к использование узла документа:

https://developers.google.com/chrome-developer-tools/docs/commandline-api#geteventlistenersobject

getEventListeners(document); 

Вы можете рекурсивно перебрать все узлы DOM и найти все обработчики событий, присоединенные если нужно.

+2

getEventListeners (myDomElement) работает в консоли инструментов разработчика Chromium v.25, но в реальном коде он вызывает ошибку. –

+0

@Robinlikethebird yes, 'getEventListeners' - это метод, который предоставляет консоль chrome devtools, я ищу метод, который может найти события, связанные с dom во время выполнения. на данный момент я просто нахожу метод jquery '$ .data (element, 'events')'. Я ищу простой javascript или DOM. – novaline

0

На Chrome V53 консоли Я попытался:

getEventListeners (документ);

, которая возвращает:

__proto__: Объект

и субэлементов, а не то, что я ищу.

Так что я пробовал:

getEventListeners (окно);

, который возвращает

Object {beforeunload: Array [1], нагрузка: Array [1]}

Это то, что я ищу. Так что я думаю, что правильный подход Робин, как путь птицы:

getEventListeners (myDomElement):

где myDomElement является целевой объект получил со стандартными способами, как getElementById и т.д ..

0

использовать следующую функцию для извлечения json зарегистрированных событий;

getEventListeners (имя_узла); где node_name может быть именем элемента или его идентификатором.

Смежные вопросы