javascript - removeEventListener 不执行或工作

标签 javascript jquery

我想弄清楚为什么我的 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/

相关文章:

javascript - 引用/解析对象

javascript - 为什么 Math.min() 返回正无穷大,而 Math.max() 返回负无穷大?

javascript - 如何从外部源加载 javascript 并在 Google Apps 脚本中执行

javascript - 将自执行的 init 方法添加到构造函数?

javascript - 元素被禁用时委托(delegate)单击事件不会触发

html - jquery cookie代码错误

用于移动设备的 Javascript onClick

javascript - jsTree:如何获取之前选择的树节点ID?

javascript - 当 iframe url 更改时如何更改包装器

jquery - 如果选中 "other"单选或复选框,则显示/隐藏 div