浅谈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 相关文章推荐
精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!
Nov 23 Javascript
JS 时间显示效果代码
Aug 23 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
Apr 15 Javascript
jQuery筛选器children()案例详解(图文)
Feb 17 Javascript
Jquery实现三层遍历删除功能代码
Apr 23 Javascript
[JSF]使用DataModel处理表行事件的实例代码
Aug 05 Javascript
js onload事件不起作用示例分析
Oct 09 Javascript
angularjs中的e2e测试实例
Dec 06 Javascript
使用jQuery实现Web页面换肤功能的要点解析
May 12 Javascript
JS对象是否拥有某属性如何判断
Feb 03 Javascript
node.js支持多用户web终端实现及安全方案
Nov 29 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 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
解析php5配置使用pdo
2013/07/03 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
在Python中使用第三方模块的教程
2015/04/27 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
python 系统调用的实例详解
2017/07/11 Python
Python logging模块用法示例
2018/08/28 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
企业演讲稿范文
2013/12/28 职场文书
春节联欢会策划方案
2014/05/16 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
大学生自荐信范文
2015/03/05 职场文书
给病人的慰问信
2015/03/23 职场文书
红色革命电影观后感
2015/06/18 职场文书
大学生暑期实践报告
2015/07/13 职场文书
九年级语文教学反思
2016/03/03 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS