javascript - 使用内联匿名函数时删除事件监听器

标签 javascript html css callback event-listener

在一个简单的游戏应用程序中,我尝试向匿名事件回调函数传递一些参数。我只能使用匿名函数来做到这一点,因为它适合上下文(它的范围标识参数)。问题是游戏有重新启动的选项。重新启动后,它会向相同的节点添加新的事件监听器,您可能会猜到旧的事件监听器仍然存在,这会导致功能不正确和应用程序过载。我能想到的解决方案是在添加新事件监听器之前删除旧的事件监听器来“刷新”。但考虑到事件回调函数是匿名的,我找不到任何方法!

那么,替代解决方案是什么?

var adder = function(colorBox, num){
    colorBox.addEventListener('click', function(){
        eventCall(this, num);
    });
}

var eventCall = function(t, num){
        var clickedBox = t.style.backgroundColor;
....

最佳答案

您可以将该函数存储在某处,以便稍后在删除时引用它。 使用数组,您可以存储多个事件处理程序,而不会被对加法器函数的多次调用覆盖,然后使用一个函数来删除所有事件处理程序等,例如:

function eventCall(t, num) {
  var clickedBox = t.style.backgroundColor;
}

var fns = [];

function adder(colorBox, num) {
  function fn() {
    eventCall(this, num);
  }

  colorBox.addEventListener('click', fn);

  fns.push(fn);
}

function remover(colorBox) {
  fns.forEach(function(fn) {
    colorBox.removeEventListener('click', fn);
  });
}

关于javascript - 使用内联匿名函数时删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43899960/

相关文章:

javascript - 我可以使用 HTML5 文件 API 预览 PDF 吗?

html - 我正在尝试使用 CSS3 Transitions 实现悬停效果

javascript - 使用 angularjs 使用 nganimate 进行前后导航

javascript - Python/Selenium 在执行 Javascript 时不会切换 Chrome 78 的页面

html - 卡住网站表格的首行

javascript - 如何在点击事件上提醒 colspan 值

.net - 使用 ASP.Net <asp :SiteMapPath> control 垂直对齐面包屑

html - CSS:自动更新字体大小

html - 如何将在 div 之间切换的 div 中的按钮包装起来?

javascript - 解析 kml 文件以在谷歌地球中显示多个地标