浅谈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实现用户名无刷新验证的小例子
Mar 22 Javascript
详解js闭包
Sep 02 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
Jquery 效果使用详解
Nov 23 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
May 25 Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
vue-devtools的安装步骤
Apr 23 Javascript
JS数组扁平化(flat)方法总结详解
Jun 24 Javascript
JavaScript编码小技巧分享
Sep 17 Javascript
JS实现点击掉落特效
Jan 29 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 date函数参数详解
2006/11/27 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
相对路径转化成绝对路径
2007/04/10 PHP
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
整理Python最基本的操作字典的方法
2015/04/24 Python
使用python实现knn算法
2017/12/20 Python
Python IDLE清空窗口的实例
2018/06/25 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
sort命令的作用和用法
2012/11/04 面试题
介绍一下JNDI的基本概念
2013/07/26 面试题
优秀高中生事迹材料
2014/02/11 职场文书
新党章的学习心得体会
2014/11/07 职场文书
毕业生政审意见范文
2015/06/04 职场文书
Java异常体系非正常停止和分类
2022/06/14 Java/Android