removeEventListener无法正常工作

时间:2011-04-28 21:51:01

标签: javascript event-listener

我不知道我做错了什么,但这是我正在做的事情的一个例子,它似乎不起作用。

someDom.addEventListener('mousemove',function(ev) {self.onInputMove(ev)},false);

someDom.removeEventListener('mousemove',self.onInputMove);

执行removeEventListener代码,但它不会删除'mousemove'监听器

4 个答案:

答案 0 :(得分:26)

removeEventListener删除完全与添加的函数匹配的侦听器。

在这种情况下,addEventListener添加的功能是:

var some_func = function(ev) {
    self.onInputMove(ev);
};

存储对实际功能的引用,你会很好。例如,以下内容应该有效:

someDom.addEventListener('mousemove',self.onInputMove,false);

someDom.removeEventListener('mousemove',self.onInputMove,false);

答案 1 :(得分:6)

onInputMove不是事件回调方法。所以你需要做一些事情:

var event = function(ev) {self.onInputMove(ev)};
someDom.addEventListener('mousemove', event,false);

someDom.removeEventListener('mousemove', event, false);

答案 2 :(得分:1)

为什么要自己这么努力,只需使用以下命令将事件绑定到元素:

element.onmousemove = function(e) {
    // Some code here...
    alert("Mouse moved!");
};

现在,当您想删除该事件时,只需执行以下操作:

element.onmousemove = null;

完成!

希望这可以帮助你们!

答案 3 :(得分:1)

此页面首先在Google上搜索此问题/此类问题。因此,除了已经提到的答案之外,这是未来更有趣的事实:

在addEventListener()中为useCapture / useBubble(因为它默认为false)省略第三个可选变量确实会在删除具有相同回调名称的同一eventlistener时产生一些问题。我在使用chrome时遇到了这个问题。不能说其他浏览器。

所以请将第三个变量明确地称为“false”。