【发布时间】:2011-06-24 10:06:34
【问题描述】:
我有一个包含方法的对象。这些方法被放入匿名函数内的对象中。它看起来像这样:
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 支持。
【问题讨论】:
-
为什么不保存这个函数呢?事件处理程序可能不是匿名函数。
-
我意识到这有点晚了,但您也可以使用 Node.setUserData/Node.getUserData 方法来存储有关元素的数据。例如,当你需要设置一个匿名监听器(并且能够移除它)时,首先将 userdata 设置为一个匿名函数
(Elem.setUserData('eventListener', function(e){console.log('Event fired.');}, null);然后执行 Elem.addEventListener('event', Elem.getUserData('eventListener'),错误的); ...对于 removeEventListener 也是如此。希望你能看到这个。 -
编辑:根据之前的评论,我猜这只能在 Firefox 中使用......我刚刚尝试过 IE8(IE9 未知)、Safari 5.1.2、Chrome (?)、Opera 11..没有骰子
-
@Heretic Monkey 这个链接是无关紧要的:1)它有没有'keydown'事件和2)所有的答案都包括鼠标点击!
标签: javascript safari dom-events anonymous-function