我有一个包含方法的对象。这些方法被放入匿名函数内部的对象中。看起来像这样:

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方法,因此我认为这是可能的。看起来像这样:
t.disable = function() {
    window.document.removeEventListener("keydown", this, false);
}

我为什么不能这样做?

还有其他(好的)方法吗?

奖金信息;这仅在Safari中有效,因此缺少IE支持。

最佳答案

我认为这是匿名函数的重点,它缺少名称或引用它的方法。

如果您是我,则只需创建一个命名函数,或将其放在变量中,以便对其进行引用。

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);

关于javascript - JavaScript中匿名函数上的removeEventListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4950115/

10-09 18:15