首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript中匿名函数的removeEventListener

JavaScript中匿名函数的removeEventListener
EN

Stack Overflow用户
提问于 2011-02-10 04:31:39
回答 10查看 123.3K关注 0票数 121

我有一个对象,里面有一些方法。这些方法被放入匿名函数内的对象中。它看起来是这样的:

代码语言:javascript
复制
var t = {};
window.document.addEventListener("keydown", function(e) {
    t.scroll = function(x, y) {
        window.scrollBy(x, y);
    };
    t.scrollTo = function(x, y) {
        window.scrollTo(x, y);
    };
});  

(有更多的代码,但这足以说明问题)

现在,我想在某些情况下停止事件侦听器。因此,我正在尝试做一个removeEventListener,但是我不知道怎么做。我在其他问题中读到,在匿名函数上调用removeEventListener是不可能的,但在这种情况下也是这样吗?

我在匿名函数中创建了一个方法,因此我认为这是可能的。看起来像这样:

代码语言:javascript
复制
t.disable = function() {
    window.document.removeEventListener("keydown", this, false);
}

为什么我不能这么做?

有没有其他(好的)方法可以做到这一点?

额外的信息;这只需要在Safari中工作,因此缺少IE支持。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-02-10 05:41:05

我认为这就是匿名函数的意义所在,它缺乏一个名称或引用它的方式。

如果我是你,我只会创建一个命名函数,或者把它放在一个变量中,这样你就可以引用它了。

代码语言:javascript
复制
var t = {};
var handler = function(e) {
    t.scroll = function(x, y) {
        window.scrollBy(x, y);
    };
    t.scrollTo = function(x, y) {
        window.scrollTo(x, y);
    };
};
window.document.addEventListener("keydown", handler);

然后,可以通过以下方式将其删除

代码语言:javascript
复制
window.document.removeEventListener("keydown", handler);   
票数 94
EN

Stack Overflow用户

发布于 2016-12-27 18:33:29

在严格模式下工作的Otto Nascarella解决方案的一个版本是:

代码语言:javascript
复制
button.addEventListener('click', function handler() {
      ///this will execute only once
      alert('only once!');
      this.removeEventListener('click', handler);
});
票数 67
EN

Stack Overflow用户

发布于 2018-11-23 17:49:28

在现代浏览器中,您可以执行以下操作...

代码语言:javascript
复制
button.addEventListener( 'click', () => {
    alert( 'only once!' );
}, { once: true } );

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters

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

https://stackoverflow.com/questions/4950115

复制
相关文章

相似问题

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