ChatGPT解决这个技术问题 Extra ChatGPT

How do I view events fired on an element in Chrome DevTools?

I have a customizable form element on a page from a library. I want to see what javascript events are fired when I interact with it because I am trying to find out which event handler to use.

How do I do that using Chrome Web Developer?

This bookmarklet can be helpful: sprymedia.co.uk/article/Visual+Event+2
The answer here is valuable, but the bookmarklet above ^ is actually what solved my problem. sprymedia.co.uk/article/Visual+Event+2

C
Charlie

Hit F12 to open Dev Tools

Click the Sources tab

On right-hand side, scroll down to "Event Listener Breakpoints", and expand tree

Click on the events you want to listen for.

Interact with the target element, if they fire you will get a break point in the debugger

Similarly, you can right click on the target element -> select "inspect element" Scroll down on the right side of the dev frame, at the bottom is 'event listeners'. Expand the tree to see what events are attached to the element. Not sure if this works for events that are handled through bubbling (I'm guessing not)


this solution is a problem if it is mouse events you are after, as the breakpoint kills the flow
what if all events point to minified jquery i dont care about, how do i reach the function that uses that jquery.
Can it show custom events which were created by me? When I read that it changed lives that was the first thing I thought about. Do I miss something?
@MuhammadUmer You can blackbox jQuery so Chrome will skip it and go straight to your source code. developer.chrome.com/devtools/docs/blackboxing
I checked the framework listeners of the event listeners but still don't see the event listeners for Backbone. Any ideas?
M
Mariusz Pawelski

You can use monitorEvents function.

Just inspect your element (right mouse clickInspect on visible element or go to Elements tab in Chrome Developer Tools and select wanted element) then go to Console tab and write:

monitorEvents($0)

Now when you move mouse over this element, focus or click it, the name of the fired event will be displayed with its data.

To stop getting this data just write this to console:

unmonitorEvents($0)

$0 is just the last DOM element selected by Chrome Developer Tools. You can pass any other DOM object there (for example result of getElementById or querySelector).

You can also specify event "type" as second parameter to narrow monitored events to some predefined set. For example:

monitorEvents(document.body, 'mouse')

List of this available types is here.

I made a small gif that illustrates how this feature works:

https://i.stack.imgur.com/goJAx.gif


Agreed. This is the defacto way to monitor and track down events on specific elements.
which tool did u use to make gif
Every so often you come across a tip which feels like a level-up. This is one of those times.
@MariuszPawelski How to proceed from here? I did this and found the click event, which was the event I was interested in. But how do I find what happens when I click on the element? What kind of code gets executed? Which property of MouseEvent should I be searching for?
but where to find handler e.g click handler.
t
tifkin

Visual Event is a nice little bookmarklet that you can use to view an element's event handlers. On online demo can be viewed here.


D
Daniel Sokolowski

For jQuery (at least version 1.11.2) the following procedure worked for me.

Right click on the element and open 'Chrome Developer Tools' Type $._data(($0), 'events'); in the 'Console' Expand the attached objects and double click the handler: value. This shows the source code of the attached function, search for part of that using the 'Search' tab.

And it's time to stop re-inventing the wheel and start using vanilla JS events ... :)

https://i.stack.imgur.com/oqVlc.png


Trying this in 2021 and I'm just getting 'undefined' in the Console output when trying this syntax. Any ideas? Still can't find out how to see which custom jQuery events are attached to a particular element :(
a
airtonix

This won't show custom events like those your script might create if it's a jquery plugin. for example :

jQuery(function($){
 var ThingName="Something";

 $("body a").live('click', function(Event){
   var $this = $(Event.target);
       $this.trigger(ThingName + ":custom-event-one");
 });

 $.on(ThingName + ":custom-event-one", function(Event){
   console.log(ThingName, "Fired Custom Event: 1", Event);
 })

});

The Event Panel under Scripts in chrome developer tools will not show you "Something:custom-event-one"


How then, does one find those events?
In Soviet Chrome, those events find you