javascript - 如何删除 javascript 中的事件监听器?

标签 javascript touch

我想知道如何在添加一个事件监听器后删除它,就像您在 jquery 中使用 on 和 off 的方式一样?

document.removeEventListener('touchstart');
document.addEventListener('touchstart', function (e) {
     closePopupOnClick(e, popup);
});

但这实际上并没有删除事件监听器。如果我将 addEventListener 代码放在一个函数中并将该函数传递给 removeEventListener 它将不起作用,因为您不能将参数传递给该函数。有人知道怎么做吗?

最佳答案

将监听器作为变量并通过 .addEventListener 附加

var myListener = function (e) {
    closePopupOnClick(e, popup);
};
document.addEventListener('touchstart', myListener, true);

然后在使用 .removeEventListener 删除时再次传递它

document.removeEventListener('touchstart', myListener);

如果您处于严格模式下,您可以使用arguments.callee

让监听器自行移除
document.addEventListener('touchstart', function (e) {
    closePopupOnClick(e, popup);
    document.removeEventListener('touchstart', arguments.callee);
}, true);

如果你在严格模式下,你必须使用一个命名函数表达式如果你想让一个函数删除它自己

document.addEventListener('touchstart', function myListener(e) {
    closePopupOnClick(e, popup);
    document.removeEventListener('touchstart', myListener);
}, true);

如果你想在监听器中使用可能被某些东西(例如循环)改变的变量,那么你可以编写一个生成器函数,例如

function listenerGenerator(popup) {
    return function (e) {
        closePopupOnClick(e, popup);
    };
}

现在您可以使用 listenerGenerator(popup) 创建监听器,它将作用于 popup 变量。请注意,如果 popup 是一个 Object,它将是 ByRef,因此可能仍会发生变化。

关于javascript - 如何删除 javascript 中的事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15100576/

相关文章:

javascript - 表格的 CSS jQuery 着色的重叠条件

javascript - d3.js 节点之间的链接不呈现为线

android - 将 WebView 触摸处理限制为链接

javascript - 在不阻止默认行为的情况下检测 IE10 中的捏/缩放

android - ACTION_UP 问题

javascript - 从数组中完全删除重复项

JavaScript 常量 |样式和关键字

c# - 使用jquery刷新验证码图像

touch - 相当于 scons 中的 "touch"?

Jquery 工具 触摸水平仅禁用垂直触摸