Используя Chrome, как узнать, какие события привязаны к элементу

Предположим, на моей странице есть ссылка:

<a href="#" id="foo">Click Here</a>

Больше я ничего не знаю, но когда я нажимаю на ссылку, отображается alert("bar"). Итак, я знаю, что где-то какой-то код привязывается к #foo.

Как найти код, связывающий alert("bar") с событием щелчка? Ищу решение с Chrome.

Ps .: Пример вымышленный, поэтому я не ищу решения вроде: «Используйте XXXXXX и ищите по всему проекту« alert (\ "bar \») ». Мне нужно реальное решение для отладки / трассировки.


person FMaz008    schedule 07.09.2011    source источник


Ответы (8)


Используется Chrome 15.0.865.0 dev. На панели «Элементы» есть раздел «Слушатели событий»:

введите описание изображения здесь

И «Точки останова для прослушивателей событий» на панели «Сценарии». Используйте Мышь -> щелкните точку останова, а затем «перейдите к следующему вызову функции», следя за стеком вызовов, чтобы увидеть, какая функция пользовательского пространства обрабатывает событие. В идеале вы должны заменить минимизированную версию jQuery неминифицированной, чтобы вам не приходилось все время входить и по возможности использовать step over.

введите описание изображения здесь

person Ionuț G. Stan    schedule 07.09.2011
comment
Подходя ближе, но большинство результатов указывают на строку 16 ... jquery.min.js :( (Я понимаю, почему, объяснять не нужно, но как мы можем узнать, кто вызвал метод bind () для jQuery? - person FMaz008; 07.09.2011
comment
Все эти инструменты доступны и в Chrome 12.0.742.100. :) Спасибо ! - person FMaz008; 07.09.2011
comment
@Fluffy: Тебе не обязательно. Просто щелкните символ { } в левом нижнем углу при просмотре js. Магия. - person Hannes Schneidermayer; 19.03.2014
comment
Пошаговое выполнение сложного кода диспетчеризации событий jQuery - большая проблема. Ответ jQuery Audit ниже (stackoverflow.com/a/30487583/24267) намного лучше. - person mhenry1384; 26.10.2015
comment
Все эти решения мне до сих пор не подходят. Из-за этой проблемы я начал отладку в Firefox. Вы просто просматриваете элемент на стандартной панели «Элементы», и рядом с ним есть небольшая, но фантастическая кнопка ev (если на ней действительно есть какое-либо событие). Вы нажимаете на него, он перечисляет обработчики, вы нажимаете на обработчик и вуаля! Великолепный! - person userfuser; 03.11.2015
comment
@Heanz Я не знаю, что спросил Пушистый, но теперь мне очень нравится символ { }! - person Howie; 22.01.2016
comment
привет, я хочу щелкнуть по событию из моего файла js функций, а не jquery и других, чтобы отлаживать, как это сделать, пожалуйста - person shareef; 15.07.2016
comment
Чтобы исключить jquery из стека вызовов, закрасьте скрипт: developer.chrome.com/devtools/docs / blackboxing @ IonuțG.Stan или моды, можете ли вы обновить ответ, указав на него ссылку на черный ящик? Кажется, это общий вопрос, имеющий отношение к этому ответу. - person Chris Hynes; 26.09.2016
comment
@ FMaz008 для последней версии chrome вы должны отметить прослушиватели Framework, чтобы показать вам точный файл javascript, который вызвал привязку, а не файл jquery. - person lovelyramos; 17.11.2017

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

  1. Щелкните правой кнопкой мыши элемент, который нужно проверить, или найдите его на панели «Элементы».
  2. Затем на вкладке / панели «Прослушиватели событий» разверните событие (например, «щелкните»).
  3. Разверните различные подузлы, чтобы найти тот, который вам нужен, а затем поищите, где находится подузел «обработчик».
  4. Щелкните правой кнопкой мыши слово "функция" и выберите "Показать определение функции".

Это приведет вас туда, где был определен обработчик, как показано на следующем изображении и объяснено Полом Айришем здесь: https://groups.google.com/forum/#!topic/google-chrome-developer-tools/NTcIS15uigA

'Показать определение функции'

person Matty J    schedule 11.08.2014
comment
два года, и все еще лучший ответ на этот вопрос. - person Stuart; 22.04.2016

Попробуйте расширение jQuery Audit (https://chrome.google.com/webstore/detail/jquery-audit/dhhnpbajdcgdmbbcoakfhmfgmemlncjg), после установки выполните следующие действия:

  1. Осмотрите элемент
  2. На новой вкладке «jQuery Audit» разверните свойство «События».
  3. Выберите нужное мероприятие
  4. В свойстве обработчика щелкните функцию правой кнопкой мыши и выберите «Показать определение функции».
  5. Теперь вы увидите код привязки события
  6. Нажмите кнопку «Pretty print», чтобы просмотреть код в более удобном виде.
person Javier Armendariz    schedule 27.05.2015
comment
Это отличное расширение, позволяющее сэкономить массу времени на просеивании JavaScript. - person Neil Monroe; 11.11.2015
comment
Я часто обнаруживаю, что в списке прослушивателей событий нет прослушивателей событий, и что выбор точки останова для прослушивателя событий ›Мышь› Щелчок не создает точку останова. Этот плагин работает очень хорошо. - person StuartN; 23.11.2015
comment
@Javier ›это отличный ответ. Работает ли это для механизма javascript (не jQuery)? - person Mahefa; 24.06.2020

(Последняя версия на 2020 г.) Для версии Chrome 83.0.4103.61:

Инструменты разработчика Chrome - прослушиватель событий

  1. Выберите элемент, который хотите проверить

  2. Выберите вкладку Event Listeners.

  3. Обязательно проверьте прослушиватели Framework, чтобы показать настоящий файл javascript вместо функции jquery.

person lovelyramos    schedule 17.11.2017

Изменить: вместо моего собственного ответа этот отличный: Как отлаживать привязки событий JavaScript / jQuery с помощью Firebug (или аналогичного инструмента)

Инструменты разработчика Google Chromes имеют функцию поиска, встроенную в раздел скриптов.

Если вы не знакомы с этим инструментом: (на всякий случай)

  • щелкните правой кнопкой мыши в любом месте страницы (в хроме)
  • нажмите "Проверить элемент"
  • перейдите на вкладку "Сценарии"
  • Панель поиска в правом верхнем углу

Быстрый поиск #ID в конечном итоге приведет вас к функции привязки.

Пример: поиск по запросу #foo приведет вас к

$('#foo').click(function(){ alert('bar'); })

введите описание изображения здесь

person Michael Jasper    schedule 07.09.2011
comment
Хорошее начало, но что, если у меня есть 1500 ссылок на #foo, большинство из которых ничего не связывает, или в случае, когда у меня есть несколько идентификаторов #foo во внешних сценариях, которые не запускаются в данном случае? - person FMaz008; 07.09.2011
comment
Отличный вопрос. По моему опыту, именно здесь обычно начинается процесс отладки человеком :) - person Michael Jasper; 07.09.2011
comment
Хе-хе, ты прав, но мой вопрос также касался того, что я должен делать как человек: p - person FMaz008; 07.09.2011

Обновление 2018 г. Может быть полезно для будущих читателей:

Я не уверен, когда это было изначально введено в Chrome. Но еще один (простой) способ сделать это сейчас в Chrome - с помощью консольных команд.

Например: (в типе консоли Chrome)

getEventListeners($0)

В то время как $ 0 - это выбранный элемент в DOM.

https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference#0_-_4

введите описание изображения здесь

person Kris Hollenbeck    schedule 17.08.2018

findEventHandlers - это плагин jquery, исходный код находится здесь: https://raw.githubusercontent.com/ruidfigueiredo/findHandlersJS/master/findEventHandlers.js.

Шаги

  1. Вставьте необработанный код прямо в консоль Chrome (примечание: должен быть уже загружен jquery)

  2. Используйте следующий вызов функции: findEventHandlers(eventType, selector);
    , чтобы найти обработчик eventType соответствующего элемента, указанного в селекторе.

Пример:

findEventHandlers("click", "#clickThis");

Затем, если таковой имеется, доступный обработчик событий будет показан ниже, вам нужно развернуть, чтобы найти обработчик, щелкните функцию правой кнопкой мыши и выберите show function definition

См .: https://blinkingcaret.wordpress.com/2014/01/17/quickly-finding-and-debugging-jquery-event-handlers/

person unifreak    schedule 11.07.2015

Для версии Chrome 52.0.2743.116:

  1. В инструментах разработчика Chrome откройте панель «Поиск», нажав _1 _ + _ 2 _ + _ 3_.

  2. Введите имя элемента, который вы пытаетесь найти.

Результаты для связанных элементов должны появиться на панели и указать файл, в котором они находятся.

person Ghost Echo    schedule 25.08.2016