我想弄清楚为什么我的 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
}
最佳答案
当您删除一个事件监听器时,您必须传递实际相同的函数引用。您正在传递一个不同的函数(具有相同的代码,但函数不同)。
解决这个问题的方法是将回调放入它自己的函数中,然后您可以在 .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);
},
仅供引用,安装事件处理程序然后在相同的代码顺序执行中像这样删除它似乎没有任何用处,无论有多少中间代码,因为事件实际上没有机会进行处理。
关于javascript - removeEventListener 不执行或工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24298531/