浅谈jQuery绑定事件会叠加的解决方法和心得总结


Posted in Javascript onOctober 26, 2016

关于jQuery的学习中我忽略了一个取消绑定事件.unbind()的使用,也不知道绑定事件会累加的情况,结果因为这个原因,让我在项目上栽了坑。只能说自己还太年轻,需要学习掌握的知识还有很多。

我遇到的问题

我在项目中遇到的状况,一个评价页面,简单的来说就是左右两个表格,ajax分别动态加载学生姓名学号信息和不同科目对学生评价内容两部分,两边表格我都每行写了checkbox并对table tbody tr绑定click事件执行行选功能,起初我写的是静态页面html,行选功能完全没有问题,后来换成jsp页面,ajax动态加载数据进来后,问题就来了,由于ajax异步请求,两边表格发送请求加载数据有先后,之前静态页面测试好的行选功能就出了问题,每次刷新页面,只有后加载的部分才可以行选,之前加载的部分行选失效。自己控制台打印点击的状态console.log(chkBoxStatus);测试发现前加载的部分总是打印两次false true,而后加载的部分只打印一次false或是true。

我之前的行选代码段:

//行选功能 
  $("table tbody tr").click(function(event) {

  //遍历tr下的checkbox元素
  var $check = $(this).find("input[type=checkbox]");

  //判断非点击checkbox本身
  if($check.length > 0 && event.target != $check[0]) { 
    var chkBoxStatus = $check.is("input:checked");
    console.log(chkBoxStatus);
    $check.prop("checked", !chkBoxStatus); 
  }

  });

起初我认为我肯定是jQuery功能代码不对,于是自己检查了html里id,class,发现并没有出错,于是我便一直在想为何控制台会意外打印两次,后面室友提示我说,试试在执行功能之前清除事件绑定,于是我便照做了用jquery 的.unbind("click"),清除所有table上的click事件。结果!结果竟然成功了!!!两边的表格数据都可以正常进行行选功能,虽然是完成了预期功能,但是我当时不知道为什么要这样去做清除事件。后面我突然想到原来是执行了两次click事件的结果,每次先加载的数据,加载完毕后就被绑定click事件一次,后加载的数据加载完毕后,之前先加载的数据再次被绑定一次click事件,所以也就是为什么先加载的数据行选失效,打印两次false true , 而后加载的数据行选正常,打印一次。

下面是修改后的代码:

//行选功能 
  $("table tbody tr").unbind("click");//清除table的所有click事件  
  $("table tbody tr").click(function(event) {

  //遍历tr下的checkbox元素
  var $check = $(this).find("input[type=checkbox]");

  //判断非点击checkbox本身
  if($check.length > 0 && event.target != $check[0]) { 
    var chkBoxStatus = $check.is("input:checked");
    console.log(chkBoxStatus);
    $check.prop("checked", !chkBoxStatus); 
  }

  });

虽然问题很小,但是也是学习,总之自己还是需要不断努力,完善自己。博文只是对自己的总结

以上就是小编为大家带来的浅谈jQuery绑定事件会叠加的解决方法和心得总结全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
css把超出的部分显示为省略号的方法兼容火狐
Jul 23 Javascript
jquery下操作HTML控件的实现代码
Jan 12 Javascript
JQuery中each()的使用方法说明
Aug 19 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
Mar 15 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 Javascript
Angularjs使用指令做表单校验的方法
Mar 31 Javascript
JS实现加载时锁定HTML页面元素的方法
Jun 24 Javascript
vue router仿天猫底部导航栏功能
Oct 18 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
原生JS实现简单的倒计时功能示例
Aug 30 Javascript
javascript贪吃蛇游戏设计与实现
Sep 17 Javascript
关于Jquery中的事件绑定总结
Oct 26 #Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
Oct 25 #Javascript
理解JavaScript原型链
Oct 25 #Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 #Javascript
jQuery+json实现动态创建复杂表格table的方法
Oct 25 #Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
Oct 25 #Javascript
JavaScript prototype属性详解
Oct 25 #Javascript
You might like
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
JavaScript库 开发规则
2009/01/31 Javascript
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
星球大战与Python之间的那些事
2016/01/07 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python实现机器学习之元线性回归
2018/09/06 Python
python仿抖音表白神器
2019/04/08 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
英国婴儿及儿童产品商店:TigerParrot
2019/03/04 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
四种会话跟踪技术
2015/05/20 面试题
大学生活自我评价
2014/04/09 职场文书
聘用意向书
2014/07/29 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫