Sprawdź dołączone procedury obsługi zdarzeń dla dowolnego elementu DOM

Czy Jest jakiś sposób, aby zobaczyć, jakie funkcje / Kod są dołączone do dowolnego zdarzenia dla elementu DOM? Za pomocą Firebug lub innego narzędzia.

Author: Claudio Redi, 2010-04-12

6 answers

Programy obsługi zdarzeń dołączone przy użyciu tradycyjnego element.onclick= handler lub HTML <element onclick="handler"> mogą być pobrane trywialnie z właściwości element.onclick ze skryptu lub debuggera.

Procedury obsługi zdarzeń dołączone przy użyciu metod DOM Level 2 Events addEventListener i attachEvent IE nie mogą być obecnie w ogóle pobrane ze skryptu. DOM Level 3 kiedyś zaproponował element.eventListenerList, aby uzyskać wszystkich słuchaczy, ale nie jest jasne, czy to dotrze do ostatecznej specyfikacji. Obecnie nie ma implementacji w żadnej przeglądarce.

Narzędzie do debugowania jako rozszerzenie przeglądarki Może uzyskać dostęp do tego rodzaju słuchaczy, ale nie jestem świadomy, że tak naprawdę.

Niektóre frameworki js pozostawiają wystarczająco dużo zapisów wiązań zdarzeń, aby ustalić, co robili. Event wizualny wykorzystuje to podejście do odkrywania słuchaczy zarejestrowanych za pomocą kilku popularnych frameworków.

 68
Author: bobince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-12 15:48:00

Panel Elements w Google Chrome Developer tools ma to miejsce od wydania Chrome w połowie 2011 roku, a Chrome developer channel od 2010 roku.

Ponadto, detektory zdarzeń wyświetlane dla wybranego węzła są w kolejności, w jakiej są wywoływane przez fazy przechwytywania i bąbelkowania.

Hit polecenie + opcja + i {[10] } na Mac OSX i Ctrl + Shift + i na Windows odpalić to w Chrome

dev tools zrzut ekranu

 71
Author: tuxtitlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-17 05:57:01

Możesz wyświetlić bezpośrednio dołączone zdarzenia (element.onclick = handler) patrząc na DOM. Możesz przeglądać zdarzenia dołączone do jQuery w Firefoksie za pomocą FireBug z FireQuery. Wygląda na to, że nie ma sposobu, aby zobaczyć zdarzenia dodane przez Addeventlistener przy użyciu FireBug. Można je jednak zobaczyć w Chrome za pomocą debugera Chrome.

 6
Author: mhenry1384,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-05 13:44:12

Możesz użyć Visual Event autorstwa Allana Jardine ' a, aby sprawdzić wszystkie aktualnie dołączone procedury obsługi zdarzeń z kilku głównych bibliotek JavaScript na twojej stronie. Działa z jQuery, YUI i kilkoma innymi.

Event wizualny jest bookmarklet JavaScript, więc jest kompatybilny ze wszystkimi głównymi przeglądarkami.

 6
Author: Medlock Perlman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-12 16:51:11

Chrome Dev Tools niedawno ogłosił kilka nowych narzędzi do monitorowania zdarzeń JavaScript.

TL; DR

Słuchaj zdarzeń określonego typu za pomocą monitorEvents().

Użyj unmonitorEvents(), aby przestać słuchać.

Get listeners of a DOM element using getEventListeners().

Użyj panelu Inspektora słuchaczy zdarzeń, aby uzyskać informacje o słuchaczach zdarzeń.

Wyszukiwanie Niestandardowych Zdarzeń

Dla mojego need, odkrywając niestandardowe zdarzenia JS w kodzie strony trzeciej, następujące dwie wersje getEventListeners() były niesamowicie pomocne;

  • getEventListeners(window)
  • getEventListeners(document)

Jeśli wiesz, do którego węzła DOM został dołączony detektor zdarzeń, przekażesz go zamiast window lub document.

Znane Zdarzenie

Jeśli wiesz, jakie zdarzenie chcesz monitorować np. click w treści dokumentu, możesz użyć następującego polecenia: monitorEvents(document.body, 'click');.

Powinieneś teraz zacząć widzieć wszystkie kliknij przycisk zdarzenia, gdy document.body jest zalogowany w konsoli.

 6
Author: GFargo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-24 19:18:55

Możesz rozszerzyć środowisko javascript, aby śledzić detektory zdarzeń. Zawijanie (lub' przeciążanie') natywnej metody addEventListener () jakimś kodem, który przechowuje zapis każdego dodanego detektora zdarzeń od tego czasu. Musisz również rozszerzyć HTMLElement.prototyp.removeEventListener do przechowywania zapisów, które dokładnie odzwierciedlają to, co dzieje się w DOM.

Tylko dla ilustracji ( nieprzetestowany kod) - oto przykład jak "zawijać" addEventListener aby mieć zapis zarejestrowanych słuchaczy zdarzeń na samym obiekcie:

var nativeMethod = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function (type, listener) {
   var el = e.currentTarget;
   if(!(el.eventListeners instanceof Array)) { el.eventListeners = []}
   el.eventListeners.push({'type':type, 'listener':listener});
   nativeMethod.call(el, type, listener);
}
 0
Author: Rolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-17 13:40:42