浅谈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 相关文章推荐
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 Javascript
jQuery对象和Javascript对象之间转换的实例代码
Mar 20 Javascript
js常用数组操作方法简明总结
Jun 20 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
Dec 31 Javascript
解决JS无法调用Controller问题的方法
Dec 31 Javascript
Bootstrap3制作搜索框样式的方法
Jul 11 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
Node.js下自定义错误类型详解
Oct 17 Javascript
bootstrap table插件动态加载表头
Jul 19 Javascript
vue 内联样式style中的background用法说明
Aug 05 Javascript
手把手带你搭建一个node cli的方法示例
Aug 07 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之COOKIE支持详解
2010/09/20 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
php获取系统变量方法小结
2015/05/29 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
jQuery中$.grep() 过滤函数 数组过滤
2016/11/22 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
详解ES7 Decorator 入门解析
2019/02/18 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
谈谈JavaScript令人迷惑的==与+
2020/08/31 Javascript
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
python计算对角线有理函数插值的方法
2015/05/07 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
Pytorch之finetune使用详解
2020/01/18 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
高三英语教学反思
2014/01/13 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
学习十八大报告感言
2014/02/04 职场文书
创意婚礼策划方案
2014/05/18 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书