Я только что написал сценарий, который позволяет вам достичь этого. Он дает вам две глобальные функции: hasEvent(Node elm, String event)
и getEvents(Node elm)
, которые вы можете использовать. Имейте в виду, что он изменяет метод-прототип EventTarget
add/RemoveEventListener
и не работает для событий, добавляемых с помощью разметки HTML или синтаксиса javascript elm.on_event = ...
, работает только для add/RemoveEventListener
.
Больше информации на GitHub
Демонстрация в реальном времени
Сценарий:
var hasEvent,getEvents;!function(){function b(a,b,c){c?a.dataset.events+=","+b:a.dataset.events=a.dataset.events.replace(new RegExp(b),"")}function c(a,c){var d=EventTarget.prototype[a+"EventListener"];return function(a,e,f,g,h){this.dataset.events||(this.dataset.events="");var i=hasEvent(this,a);return c&&i||!c&&!i?(h&&h(),!1):(d.call(this,a,e,f),b(this,a,c),g&&g(),!0)}}hasEvent=function(a,b){var c=a.dataset.events;return c?new RegExp(b).test(c):!1},getEvents=function(a){return a.dataset.events.replace(/(^,+)|(,+$)/g,"").split(",").filter(function(a){return""!==a})},EventTarget.prototype.addEventListener=c("add",!0),EventTarget.prototype.removeEventListener=c("remove",!1)}();