如何从多个元素中删除事件

时间:2013-07-12 23:14:39

标签: javascript

我正在尝试删除input元素的事件。

我有以下

//add mouse up event on all element under mainDiv
addEvent('mainDiv', 'onmouseup', mouseUpFun);

//search all the input elements and remove the mouse up event 
inputs = document.getElementsByTagName('input');
    for(var i; i < inputs.length; i++){
      var input = inputs[i];
       input.removeEventListener('onmouseup');
    }

上述代码不起作用且仍附加onmouseup事件。

任何人都可以帮我解决这个问题吗?非常感谢!

2 个答案:

答案 0 :(得分:3)

嗯,一个原因可能是你的循环永远不会运行。您需要在循环中初始化i

for(var i = 0; i < inputs.length; i++){
   var input = inputs[i];
   input.removeEventListener('onmouseup');
}

否则,由于i的初始值为undefined,此循环将永远不会运行。

您对removeEventListener的来电也无法按预期方式运作。您还需要提供对所使用的侦听器/处理程序的引用。

有关removeEventListener的正确用法,请参阅here

如果所有内容都使用mouseUpFun,您可以将其提供给removeEventListener

input.removeEventListener('onmouseup', mouseUpFun);

答案 1 :(得分:0)

请参阅https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.removeEventListener

使用removeEventListener时,需要引用要删除的侦听器函数。

然后,你可以:

  • 使用addEvent功能,您可以保存添加的侦听器的引用

  • 您可以克隆该元素并将其替换为克隆。这样,您将删除所有事件侦听器(包括其子节点的事件侦听器)。