【发布时间】:2015-01-20 22:57:26
【问题描述】:
如果我像下面的代码那样使用内联函数,如何检查一个元素上是否有事件监听器?因为我有一个调用函数并添加事件侦听器的函数,但它会导致重复事件侦听器导致它触发两次函数。如果它已经存在,我如何检查它以便阻止它添加事件侦听器?
for (var a = 0;a<formFieldInput.length;a++) {
if(formFieldInput[a].hasAttribute("name") && formFieldInput[a].attributes.title.value !== "Valid Until") {
formFieldInput[a].addEventListener("click",function(event) {
toggleFieldList(event,"show");
});
}
【问题讨论】:
-
你可以先删除再添加
-
添加监听器和附加属性,如
data-listener = true,然后检查是否设置了data-litener,如果没有则只添加监听器不是更容易吗? -
您也可以使用直接赋值来绑定一个事件处理程序,例如:formFieldInput[a].onclick=function(){...};当您更换它们时,旧的就会消失而没有复杂性......
-
@pawel 谢谢。有用。我在上面添加了一个附加属性。 formFieldInput[a].setAttribute("事件",true);我现在要做的是检查 hasAttribute("events") 是否进行检查:D
-
不确定这是否是一个好习惯,但我通过删除事件函数开头的所有兄弟事件(在我的情况下)解决了我的重复事件问题。我使用了 off() jQuery 函数api.jquery.com/off
标签: javascript