我正在试图找出为什么我的removeEventListener无法正常工作,我已经尝试了多种方法来修复它但仍然没有工作任何洞察力会有所帮助。 addEventListener正在按预期工作,但当我尝试删除侦听器时出现问题。以下是相关代码的片段。任何建议或帮助都非常感谢。
init: function(el, callback) {
var that = this;
this.touchSurface = el;
this.touchSurface.addEventListener('touchstart', function(e){ that.onStart(e); }, false);
this.touchSurface.removeEventListener('touchstart',function(e){ that.onStart(e); }, false);
},
onStart: function(e) {
//Do something
}
答案 0 :(得分:2)
删除eventListener时,必须传递实际相同的函数引用。您正在传递一个不同的函数(具有相同的代码,但功能不同)。
解决此问题的方法是将回调放入其自己的函数中,然后您可以在.addEventListener()
和.removeEventListener()
中引用完全相同的函数。
我不确定你为什么要尝试添加然后立即删除事件监听器(因为这样做没有任何好处),但你可以这样做:
init: function(el, callback) {
var that = this;
function handleStart(e) {
that.onStart(e);
}
this.touchSurface = el;
el.addEventListener('touchstart', handleStart), false);
el.removeEventListener('touchstart', handleStart, false);
},
仅供参考,似乎没有任何用于安装事件处理程序然后在相同的顺序执行代码中删除它,无论有多少干预代码,因为没有实际处理事件的机会。