我有一个JavaScript函数来设置某些HTML节点的“onclick” - 事件 - 即使之前设置了“onclick”-event。
如何检查是否已设置该事件,因此我可以扩展我的功能,仅在尚未设置的HTML节点上设置事件?
答案 0 :(得分:10)
检查,如下:
if(typeof someNode.onclick == "function") {
// someNode has an event handler already set for the onclick event...
}
顺便说一下,如果您使用的是库,那么您应该这样说 - 如果您这样做,它可能更容易/更清洁,并且根据您使用的库而有所不同......
答案 1 :(得分:6)
应该可以通过拦截对函数的调用来检测使用<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);
};
注意:这是未经测试的代码,可能需要一些工作。我希望希望所有元素类型都会使用这个相同的函数,但我可能错了。此外,只有在开始添加事件之前可以运行这段代码,它才会起作用。可以类似地构建attachEvent的副本。
答案 2 :(得分:1)
<input type="button" id="foo" name="foo" value="bar" />
<script type="text/javascript">
alert(document.getElementById('foo').onclick); //undefined
</script>
所以你想要做的是这样的事情:
<script type="text/javascript">
if (undefined == document.getElementById('foo').onclick)
{
// Add event handler
}
</script>
答案 3 :(得分:-2)
另一种选择,将类添加到元素
if(!elem.class.match('hasEvent'))
{
elem.addEventListener(event, function(){});
elem.className = elem.className + ' hasEvent';
}