浅谈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 相关文章推荐
zeroclipboard复制到剪切板的flash
Aug 04 Javascript
HTML颜色选择器实现代码
Nov 23 Javascript
Javascript绝句欣赏 一些经典的js代码
Feb 22 Javascript
js中判断用户输入的值是否为空的简单实例
Dec 23 Javascript
JQuery实现的图文自动轮播效果插件
Jun 19 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
JS截取字符串实例详解
Nov 24 Javascript
ES6新特性之模块Module用法详解
Apr 01 Javascript
Django+Vue.js搭建前后端分离项目的示例
Aug 07 Javascript
js 概率计算(简单版)
Sep 12 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
Oct 19 Javascript
AngularJS实现图片上传和预览功能的方法分析
Nov 08 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/10/09 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
利用中国天气预报接口实现简单天气预报
2014/01/20 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
php在apache环境下实现gzip配置方法
2015/04/02 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
appendChild() 或 insertBefore()使用与区别介绍
2013/10/11 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
实例讲解React 组件
2020/07/07 Javascript
详解Python中的元组与逻辑运算符
2015/10/13 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
Python异常的检测和处理方法
2018/10/26 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python 爬取疫情数据的源码
2020/02/09 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
蒂娜商店:Tiina the Store
2019/12/07 全球购物
公司年会晚宴演讲稿
2014/01/06 职场文书
酒店led欢迎词
2014/01/09 职场文书
学生乘坐校车安全责任书
2015/05/11 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers