JS addEventListener多次绑定同一事件,触发多次

这两天遇到一个问题,循环出来的组件,添加了相同的监听事件‘click’,但当click事件触发的时候,会执行好几次处理action的方法。很明显这是一个问题,我们想要的是就算同一个组件添加多次监听事件,但在监听到的事件执行时,也只是触发一次action方法。从网上找到了一些解决办法,在这里记录下来。

  • 下面是我模拟问题写的伪代码
function handleAction (event) {
    console.log('im action', event);
}

var btn = document.getElementById('button');
btn.addEventListener('click', event => handleAction(event), false);
btn.addEventListener('click', event => handleAction(event), false);

像上面这样处理函数,在控制台打印出来的结果是两次,但我们不想要它打印两次,我们想不管监听几次,在触发事件执行的时候,只执行一遍handleAction 函数。

  • 从网上找了一些资料,也有人遇到相同的问题,以下是解决方案。
function handleAction (event) {
    console.log('im action', event);
  }

  var newHandle = function (event) {
     handleAction(event);
  }

  var btns = document.getElementById('btn');
  btns.addEventListener('click', newHandle, false);
  btns.addEventListener('click', newHandle, false);

只需要将函数重新包装一下,用一个变量接收一个匿名函数,达到一个闭包的效果。

参考链接 hope help

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 声明:本文来源于http://www.webzsky.com/?p=731我只是在这里作为自己的学习笔记整理一下(...
    angryyan阅读 7,141评论 1 6
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,211评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,406评论 0 2
  • 事件绑定的方式 给 DOM 元素绑定事件分为两大类:在 html 中直接绑定 和 在 JavaScript 中绑定...
    Bruce_zhuan阅读 1,063评论 0 6
  • 下午下课后接到室友的电话,让我去图书馆帮他借本书。穿过食堂到图书馆的小径,撞见了两只鸭子在湖岸边戏水,蓦然想起了一...
    申楚学长阅读 420评论 0 1