浅谈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 ui css framework
Jun 28 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
Oct 17 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
Javascript基础教程之if条件语句
Jan 18 Javascript
javascript实现实时输出当前的时间
Apr 27 Javascript
jQuery操作cookie
Aug 08 Javascript
js如何获取图片url的Blob值并预览示例代码
Mar 07 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
Dec 06 Javascript
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
关于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的cms
2010/12/19 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
PHP反射基础知识回顾
2020/09/10 PHP
javascript ajax的5种状态介绍
2014/08/18 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
2017/11/22 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
haskell实现多线程服务器实例代码
2013/11/26 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
售后服务科岗位职责范文
2013/11/13 职场文书
公司会议策划方案
2014/05/17 职场文书
高考标语大全
2014/06/05 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby