Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查是否已设置JavaScript事件处理程序?_Javascript_Events - Fatal编程技术网

如何检查是否已设置JavaScript事件处理程序?

如何检查是否已设置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... } 顺便说一下,如果您正

我有一个JavaScript函数,可以设置一些HTML节点的“onclick”事件,即使之前已经设置了“onclick”事件

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

检查,如下所示:

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的技术结合起来。因为注册事件处理程序有两种方法,所以我们需要使用两种不同的技术来找到它们!