如何在javascript中删除事件监听器?
我想知道如何添加一个事件监听器,你在jquery中使用on和off的方式?
document.removeEventListener('touchstart'); document.addEventListener('touchstart', function (e) { closePopupOnClick(e, popup); });
但这实际上并没有删除事件监听器。 如果我将addEventListener代码放在一个函数中并将该函数传递给removeEventListener它将无法工作bc你不能将params传递给函数。 有人知道怎么做吗?
将侦听器作为变量并通过.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
是一个对象 ,它将是ByRef ,因此可能仍会受到更改。