浅谈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 相关文章推荐
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
实例分析js和C#中使用正则表达式匹配a标签
Nov 26 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
JavaScript运算符小结
Jun 03 Javascript
JavaScript中for循环的使用详解
Jun 03 Javascript
jQuery UI设置固定日期选择特效代码分享
Aug 27 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
Dec 08 Javascript
js获取ip和地区
Mar 10 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
React学习笔记之列表渲染示例详解
Aug 22 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
详细分析Node.js 多进程
Jun 22 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下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
移动端界面的适配
2017/01/11 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
Python3实现生成随机密码的方法
2014/08/23 Python
Python列表list数组array用法实例解析
2014/10/28 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
华为的Java面试题
2014/03/07 面试题
银行柜员应聘推荐信范文
2013/11/24 职场文书
合作经营协议书范本
2014/04/17 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
六查六看心得体会
2014/10/14 职场文书
职工年度考核评语
2014/12/31 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
孙振耀退休感言
2015/08/01 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
浅谈如何保证Mysql主从一致
2022/03/13 MySQL