【问题标题】:removeEventListener is not workingremoveEventListener 不工作
【发布时间】:2011-08-15 02:13:42
【问题描述】:

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

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

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

removeEventListener 代码已执行,但它并没有删除“mousemove”侦听器

【问题讨论】:

    标签: javascript event-listener


    【解决方案1】:

    onInputMove 不是事件回调方法。因此,您需要执行以下操作:

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

    【讨论】:

    • removeEventListener 的第三个参数也是强制性的,所以你的例子应该是:someDom.removeEventListener('mousemove', event, false);
    • event 不是您的事件处理函数参考的好名字
    【解决方案2】:

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

    在这种情况下,addEventListener 添加的函数是:

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

    存储对实际函数的引用,你会很好。因此,例如,以下应该可以工作:

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

    【讨论】:

    • removeEventListener 的第三个参数也是强制的,所以你的例子应该是:someDom.removeEventListener('mousemove', self.onInputMove, false);
    • 我知道我迟到了几年,但第三个参数实际上不是强制性的,对吧?我认为它应该是可选的,它应该默认为 false。
    • 曾几何时,但不再是强制性的。为了清楚起见,我会把它留在那里,但很好。
    • 请解释一下removeEventListener中的第三个参数?我需要在addEventListener 中使用true 作为第三个参数,这样我就可以防止默认鼠标点击...(打开链接),所以我不能将false 设置为此方法..
    • 如果您对addremoveEventListener 都使用true,它将起作用 - 根本问题是添加的函数必须与被删除的函数完全相同。
    【解决方案3】:

    何必自己做这么难,直接用下面的方法绑定一个事件到一个元素上:

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

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

    element.onmousemove = null;
    

    完成!

    希望对大家有所帮助!

    【讨论】:

    • 这应该被标记为答案。祝你好心的先生。你刚刚救了我。
    • @thandasoru 如果您正在使用事件侦听器,则不是。
    • 因为它使用旧的事件处理程序作为属性范例,而不是 DOM Level 2 事件标准。而且,因为这种技术不允许对单个事件使用多个处理程序。
    • 另外,它不允许您指定捕获或气泡,或其他选项。
    【解决方案4】:

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

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

    因此,请明确提及第三个变量为“假”。

    【讨论】:

      猜你喜欢
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 2018-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多