关于js中事件重复绑定的问题

在写一个项目,有一个触发编辑按钮才会出现编辑板块,然后编辑板块中有点击添加的事件。当保存编辑,编辑板块消失。再次点击编辑,再点击添加,会触发多次,生成多个模块。

经过多次反复痛苦的调试,发现是在点击编辑后调用的函数中绑定了添加的事件,当再次点击编辑时,会重复绑定,所以会出现触发多次的bug。

解决方法就是在绑定之前先解绑。

$('.u-edit-btn-box').off('click','#btnAdd').on('click','#btnAdd',function() {addInput();});

这样就可以解决了。jquery中还有很多类似的处理,比如说运行一个动画前先将之前的动画stop()掉。


不过在解绑事件时最好将具体的元素写入,因为在事件委托时,不写明具体,解绑会将所有事件解绑

<body>
<button class="btn1">绑定2和3事件</button>
<button class="btn2">2事件</button>
<button class="btn3">3事件</button>
</body>
  <script type="text/javascript" src="js/jquery-3.1.0.min.js"></script>
  <script type="text/javascript">
$('body').on('click','.btn1',function() {
    $('body').off().on('click','.btn2',function() {
        alert(2);
    });
    $('body').off().on('click','.btn3',function() {
        alert(3);
    });
})

</script>

上述例子只会触发alert(3),因为点击btn1时,解绑了所有在body上的click事件,只会调用在最后绑定的alert(3)。
应该写成

 $('body').on('click','.btn1',function() {
    $('body').off('click','.btn2').on('click','.btn2',function() {
        alert(2);
    });
    $('body').off('click','.btn3').on('click','.btn3',function() {
        alert(3);
    });
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第1章 鼠标事件 1-1 jQuery鼠标事件之click与dbclick事件 用交互操作中,最简单直接的操作就是...
    mo默22阅读 1,296评论 0 6
  • 事件流 IE和Netscape开发团队提出了完全相反的两种事件流的概念,事件冒泡流和事件捕获流。 事件冒泡 事件由...
    exialym阅读 986评论 0 9
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,285评论 25 708
  • 认识阿华是在开学军训期间。那天,我们正在休息,阳光正直当头,本来有点中暑的我看什么都晕晕乎乎的,可是就在模糊状态中...
    赤道偏离阅读 724评论 16 7
  • 被安利了一种叫做 Adactylidium 的螨虫的奇特生命周期,这个物种的人生就是死循环啊: Adactylid...
    马文Marvin阅读 540评论 0 0