我有一个对象,里面有一些方法。这些方法被放入匿名函数内的对象中。它看起来是这样的:
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是不可能的,但在这种情况下也是这样吗?
我在匿名函数中创建了一个方法,因此我认为这是可能的。看起来像这样:
t.disable = function() {
window.document.removeEventListener("keydown", this, false);
}
为什么我不能这么做?
有没有其他(好的)方法可以做到这一点?
额外的信息;这只需要在Safari中工作,因此缺少IE支持。
发布于 2011-02-10 05:41:05
我认为这就是匿名函数的意义所在,它缺乏一个名称或引用它的方式。
如果我是你,我只会创建一个命名函数,或者把它放在一个变量中,这样你就可以引用它了。
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);
然后,可以通过以下方式将其删除
window.document.removeEventListener("keydown", handler);
发布于 2016-12-27 18:33:29
在严格模式下工作的Otto Nascarella解决方案的一个版本是:
button.addEventListener('click', function handler() {
///this will execute only once
alert('only once!');
this.removeEventListener('click', handler);
});
发布于 2018-11-23 17:49:28
在现代浏览器中,您可以执行以下操作...
button.addEventListener( 'click', () => {
alert( 'only once!' );
}, { once: true } );
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters
https://stackoverflow.com/questions/4950115
复制相似问题