浅谈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 相关文章推荐
javascript面向对象快速入门实例
Jan 13 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
Oct 16 Javascript
node.js插件nodeclipse安装图文教程
Oct 19 Javascript
JavaScript检测原始值、引用值、属性
Jun 20 Javascript
javaScript给元素添加多个class的简单实现
Jul 20 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
Mar 03 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 Javascript
小程序云开发获取不到数据库记录的解决方法
May 18 Javascript
vue中node_modules中第三方模块的修改使用详解
May 31 Javascript
JavaScript实现简单的计算器
Jan 16 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 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
删除无限级目录与文件代码共享
2006/07/12 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
php中stream(流)的用法
2014/03/25 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
nodejs之请求路由概述
2014/07/05 NodeJs
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
js实现简单的计算器功能
2017/01/16 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
python浪漫表白源码
2019/04/05 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
Python如何将函数值赋给变量
2020/04/28 Python
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
小学生红领巾广播稿
2014/01/21 职场文书
生产部岗位职责范文
2014/02/07 职场文书
模具专业自荐信
2014/05/29 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL