我不知道我做错了什么,但这是我正在做的事情的一个例子,它似乎不起作用。
someDom.addEventListener('mousemove',function(ev) {self.onInputMove(ev)},false);
someDom.removeEventListener('mousemove',self.onInputMove);
执行removeEventListener代码,但它不会删除'mousemove'监听器
答案 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”。