如何检查是否已设置JavaScript-Eventhandler?

use*_*531 16 javascript events

我有一个JavaScript函数设置一些HTML节点的"onclick" - 事件 - 即使之前设置了"onclick"-event.

我如何检查是否已经设置了该事件,因此我可以扩展我的功能,仅在尚未设置的HTML节点上设置事件?

Jas*_*ing 10

检查,像这样:

if(typeof someNode.onclick == "function") {
   // someNode has an event handler already set for the onclick event...
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你正在使用一个库,你应该这样说 - 如果你是,它可能更容易/更清洁,并根据你使用的库而有所不同...

  • 这对使用attachEvent或addEventListener设置的事件处理程序不起作用. (8认同)
  • 顺便说一下,这个*是一个wiki - 随时编辑我的响应并添加更强大的代码......:P (3认同)

joe*_*dle 7

应该可以<element>.addEventListener()通过拦截对函数的调用来检测附加的事件处理程序:

var myListOfAddedEvents = [];

var realAddEventListener = HTMLElement.prototype.addEventListener;

HTMLElement.prototype.addEventListener = function(evtType,fn,cap) {
    myListOfAddedEvents.push(
        {on: this, type: evtType, handler: fn, capture: cap}
    );

    return realAddEventListener.apply(this, arguments);
};
Run Code Online (Sandbox Code Playgroud)

注意:这是未经测试的代码,可能需要一些工作.我希望所有元素类型都能使用相同的函数,但我可能错了.此外,只有开始添加事件之前可以运行这些代码时,它才会起作用.可以类似地构建attachEvent的副本.