javascript - 如何使用柯里化(Currying)函数删除事件监听器

标签 javascript dom-events

我很难删除事件监听器类型柯里化(Currying)函数。

// I register first, at some time I want to remove using freezeHighlight but it doesn't working (without currying function it's working like a charm)
const privateMethods = {
  highlighted (index) {
    return function (event) {
      event.target.setAttribute('filter', 'url(#glow)')

      // need param index later
    }
  }
}

register (node, index) {
      node.addEventListener('mouseover', privateMethods.highlighted(index))
  }

freezeHighlight (node) {
        node.removeEventListener('mouseover', privateMethods.highlighted)
  }

是否可以删除事件监听器类型柯里化(Currying)函数,或者我应该继续使用解决方法?

最佳答案

您需要记住您创建的处理程序,以便稍后将其删除。

const handlers = {};

const privateMethods = {
  highlighted (index) {
    // return the saved handler if we've been called before
    // or create a new handler, save it, and return it.
    return handlers[index] || (handlers[index] = function (event) {
      event.target.setAttribute('filter', 'url(#glow)')

      // need param index later
    });
  }
}

register (node, index) {
      // add the handler
      node.addEventListener('mouseover', privateMethods.highlighted(index))
}

freezeHighlight (node, index) {
      // will remove the handler
        node.removeEventListener('mouseover', privateMethods.highlighted(index))
}

关于javascript - 如何使用柯里化(Currying)函数删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55650739/

相关文章:

javascript - 在新页面中打开图像并在单击时打印

javascript - Bootstrap Ajax 选项卡未预加载

javascript - 在 HTML 中的 JavaScript 中插入 HTML

javascript - 为什么以及何时使用重组分支?

javascript - 联系表单 7 - 在表单提交后添加重定向延迟

javascript - 如何删除滚动事件监听器?

javascript - 当将某物拖到输入上时会触发哪个事件?

javascript - 如何在 jQuery 中编写三元运算符条件?

javascript - 如何在html表中显示firebase运行时数据库数据

javascript - 如何将参数传递给作为 addEventListener 的参数传递或分配给事件处理程序的函数?