浅谈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 相关文章推荐
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
Javascript表单验证要注意的事项
Sep 29 Javascript
基于jQuery实现收缩展开功能
Mar 18 Javascript
第一篇初识bootstrap
Jun 21 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 Javascript
node使用Mongoose类库实现简单的增删改查
Nov 08 Javascript
vue实现购物车抛物线小球动画效果的方法详解
Feb 13 Javascript
layer.prompt输入层的例子
Sep 24 Javascript
JS如何把字符串转换成json
Feb 21 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
Apr 07 Javascript
基于redis的小程序登录实现方法流程分析
May 25 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脚本
2006/11/26 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP getName()函数讲解
2019/02/03 PHP
彪哥1.1(智能表格)提供下载
2006/09/07 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
python实现zabbix发送短信脚本
2018/09/17 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
Python读取stdin方法实例
2019/05/24 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
python nmap实现端口扫描器教程
2020/05/28 Python
公司募捐倡议书
2014/05/14 职场文书
大四学生个人总结
2015/02/15 职场文书
2015新学期家长寄语
2015/02/26 职场文书
仙境之桥观后感
2015/06/16 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS