如何检查是否已设置JavaScript事件处理程序?
我有一个JavaScript函数,可以设置一些HTML节点的“onclick”事件,即使之前已经设置了“onclick”事件 如何检查该事件是否已设置,以便我可以扩展我的功能,仅在尚未设置该事件的HTML节点上设置该事件?检查,如下所示:如何检查是否已设置JavaScript事件处理程序?,javascript,events,Javascript,Events,我有一个JavaScript函数,可以设置一些HTML节点的“onclick”事件,即使之前已经设置了“onclick”事件 如何检查该事件是否已设置,以便我可以扩展我的功能,仅在尚未设置该事件的HTML节点上设置该事件?检查,如下所示: if(typeof someNode.onclick == "function") { // someNode has an event handler already set for the onclick event... } 顺便说一下,如果您正
if(typeof someNode.onclick == "function") {
// someNode has an event handler already set for the onclick event...
}
顺便说一下,如果您正在使用库,您应该这样说-如果您正在使用库,它可能会更容易/更干净,并且会根据您正在使用的库而有所不同…
<input type="button" id="foo" name="foo" value="bar" />
<script type="text/javascript">
alert(document.getElementById('foo').onclick); //undefined
</script>
警报(document.getElementById('foo').onclick)//未定义
所以你要做的是这样的:
<script type="text/javascript">
if (undefined == document.getElementById('foo').onclick)
{
// Add event handler
}
</script>
if(undefined==document.getElementById('foo').onclick)
{
//添加事件处理程序
}
应该可以通过拦截对函数的调用来检测使用.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);
};
注意:这是未经测试的代码,可能需要一些工作。我希望所有元素类型都能使用相同的函数,但我可能错了。而且,只有在他们开始添加事件之前运行这段代码,它才会起作用。attachEvent的副本也可以类似地构造。并且,如果开发人员使用类似于:button.addEventListener(“单击”,buttonPressed,true)的内容,则;在Mozilla中?这对使用attachEvent或addEventListener设置的事件处理程序不起作用。我知道,但由于OP没有指定如何连接,所以我假设使用DOM 0方法进行连接。顺便说一句,这是一个wiki-请随意编辑我的响应并添加更健壮的代码…:P@johnktejik您正在上安装一个
。将其设置为.onMouseCenter
。这对使用attachEvent或addEventListener设置的事件处理程序不起作用。您可能希望将其与Jason Bunting的技术结合起来。因为注册事件处理程序有两种方法,所以我们需要使用两种不同的技术来找到它们!