jquery中click事件的累加绑定,点击一次,执行多次

最近做项目为一个添加按钮绑定点击事件,很简单的一个事情,于是我按照通常做法找到元素,使用jquery的on()方法为元素绑定了点击事件,点击同时发送请求。完成后看效果,第一次点击没有问题。再一次点击后发现发送了两次请求,后面再点击发现请求的数量越来越多。这时我初步判断可能是元素有多个或是多次调用了方法,但找了一遍,发现只为一个元素绑定了事件,且只调用了一次。后来通过查资料才知道是点击事件被累加绑定了!那到底什么是累加绑定呢?什么时候会发生累加绑定?累加绑定后该如何解决呢?下面我就通过这三个问题来说一下。

$("#ads_tb .contentDel").on("click",function(){
  $(this).each(function(){
   var addr_name = $(this).parent().find(".obj_name").html();
           var jsonDel ={
             "name": addr_name
            }
           alert("确定要删除这一条吗?")
           Group.Ajax(jsonDel);    
   });
});

在页面中为一个元素绑定事件,事件执行后页面未刷新且元素还在,然后你再次点击,元素又被绑定个一次点击事件,这样第二次点击就会执行两次,以此类推。
如何解决累加绑定:第一种方法是元素点击后删除,然后再动态创建一个元素,再添加点击事件。显然这个方式很麻烦。
第二中方法是使用jquery的one()方法,为元素绑定一个一次性的事件处理函数,这个事件处理函数只会被执行一次。

$("#adsCollection_tb").one("click",function(){
    alert("执行"); 
});

第三种方法是在每次绑定点击事件前先解除之前的事件绑定,再为元素绑定事件,类似于先清空,在做操作一样。但你使用bind()方法绑定时,可以用unbind()方法解除绑定。通常我们跟愿意用on()方法绑定事件,因为bind()方法已经不被推荐,那么那么就用off()方法解除事件绑定。

$("#adsCollection_tb").unbind("click").bind("click",function(){
     alert("执行"); 
  });
  $("#adsCollection_tb").off("click").on("click",function(){
     alert("执行"); 
 });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近在工作上遇到一个点击事件累加的问题,为元素添加点击事件效果,但是总是效果失败,最后发现点击事件被执行了多次,上...
    前端很忙阅读 5,458评论 2 0
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 4,938评论 0 1
  • 记得刚分手的时候,w小姐总是哭着对身边的朋友说着渣男,对了。这个渣男就是他的前男友。他们一起经历了很多,一起...
    f771945debac阅读 1,315评论 0 1
  • 学会合理规划时间,学会处理自己的情绪~
    LittleBoss阅读 1,517评论 0 0
  • 越到这种不冷不热的季节 情绪就越开始不悲不喜 早晨一觉醒来 拉开窗帘温暖的阳光打在脸上 找了一件白净的T恤穿好 可...
    礼雪晶阅读 3,414评论 0 16

友情链接更多精彩内容