首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RemoveEventListener不起作用

RemoveEventListener不起作用
EN

Stack Overflow用户
提问于 2017-10-12 07:41:25
回答 1查看 470关注 0票数 0

我有一个非常奇怪的例子,阻止我移除eventListener。这是一个非常简单的函数,它绑定到键盘事件,并在不需要时解除绑定(理论上)。

守则如下:

代码语言:javascript
复制
const keyboardEvents = function(input, remove = false) {
    const { key, func } = input;
    const operation = remove ? 'removeEventListener' : 'addEventListener';

    function keyboardFunction(event) {
        console.log(event);

        if (event.keyCode === key) {
            func();
        }
    }

    window[operation]('keyup', keyboardFunction);

  if (remove) {
    console.log('REMOVED');
  } else {
    console.log('ADDED');
  }
};

我用的是

代码语言:javascript
复制
keyboardEvents({ key: 27, func: testFunc }); // add event
keyboardEvents({ key: 27, func: testFunc }, true); // remove event

问题是,侦听器没有被移除。我能做什么?

CodePen供参考:https://codepen.io/tomekbuszewski/pen/LzBZgP?editors=0010

我也试过不使用operation,只是写

代码语言:javascript
复制
if (remove) {
  window.removeEventListener('keyup', keyboardFunction);
} else {
  window.addEventListener('keyup', keyboardFunction);
}

结果是一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-12 07:44:58

您需要为从事件处理程序中移除提供相同的函数引用。每次调用keyboardEvents时,都会创建一个名为keyboardFunction的新函数,因此与要调用的调用不同。所以你为什么不能把它移除。

试试下面的代码Codepen

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46704065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档