There is this answer: can I programmatically examine and modify Javascript event handlers on html elements? but it doesn't provide the runtime solution
Asked
Active
Viewed 207 times
1 Answers
4
There isn't any direct API for this, but it can be accessed in a kind of intrusive way.
By overriding HTMLElement.prototype.addEventListener
we can catch added events and store them in an array for example.
const listeners = []
const originalAddEventListener = HTMLElement.prototype.addEventListener
HTMLElement.prototype.addEventListener = function(type, listener, options) {
listeners.push({
element: this,
type,
listener,
options
})
// call the original listener with current this and provided arguments
return originalAddEventListener.call(this, type, listener, options)
}
Full snippet with example:
const listeners = []
const originalAddEventListener = HTMLElement.prototype.addEventListener
HTMLElement.prototype.addEventListener = function(type, listener, options) {
listeners.push({
element: this,
type,
listener,
options
})
return originalAddEventListener.call(this, type, listener, options)
}
document.querySelector('p').addEventListener('click', () => {
console.log('clicked')
}, false)
document.querySelector('button').addEventListener('click', () => console.log(listeners))
p {
width: 100px;
height: 100px;
background: red;
color: white;
}
<button>list listeners</button>
<p>click me</p>

Konrad
- 21,590
- 4
- 28
- 64
-
1Just perfect fix! – Nikola Lukic Aug 19 '23 at 16:37