jQuery实现checkbox列表的全选、反选功能


Posted in Javascript onNovember 24, 2016

我们在做列表的时候经常会遇到全选,反选进行批量处理问题,例如:

jQuery实现checkbox列表的全选、反选功能

我当时就是简单的实现了,然后想封装到公共的js中,封装的太烂,不好意思贴出来了(就是把实现代码之间放到公共js中,然后每个页面都用固定的id,class,现在想想我都不好意思叫他封装了),然后想到之前老大有写过这个功能去看下他怎么写的,真是没有对比就没有伤害啊,这才叫封装;

$(':checkbox[data-check-target]').click(function () {
  var target = $(this).attr('data-check-target');
  if ($(this).prop('checked')) {
    $(target).prop('checked', true);
  } else {
    $(target).prop('checked', false);
  }
});

首先这儿的高封装性就体现出来了,只有一个自定义的data-check-target属性用于js和html分离后的连接桥梁(而我当时用两个:一个全选复选框,一个子复选框,有关的点都用上了,这样就没起到封装的效果,js和html耦合性太大)(我看到上面的js就在想怎么通过一个连接点把三个相关联的东西联系起来的呢);

接下来我们继续看具体使用的地方:

jQuery实现checkbox列表的全选、反选功能

我发现全选复选框用于和js链接的桥梁的自定义属性data-check-target有点特别:

<input type="checkbox" data-check-target=".id-checkbox" />

它的值为“.id-checkbox”,看起来就感觉好奇怪,继续往下看子复选框实现:

<input type="checkbox" name="ids[]" value="@item.Id" class="id-checkbox" />

到这儿才豁然开朗原来子复选框的class名称就存放在自定义属性data-check-target中;

var target = $(this).attr('data-check-target');

然后再通过自定义属性data-check-target拿到子复选框的class,从而达到高封装性;

我总结的就是js和html通过了自定义属性data-check-target通信,子复选框依赖全选复选框自定义属性data-check-target的值;

这个例子看下来代码不难,也没有什么地方很难理解的,就是通过一个自定义属性巧妙的完成了低耦合的封装,这也是正是这段代码的难点和精髓;

我真心抑制不住内心的崇拜,这几行代码太漂亮了。

PS:上面js为什么用prop而不用attr,因为:如果当前input中初始化未定义checked属性,则该元素没有指定的checked属性,所以.attr()会返回undefined;

对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。

Javascript 相关文章推荐
有关DOM元素与事件的3个谜题
Nov 11 Javascript
Javascript图像处理—亮度对比度应用案例
Jan 03 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
Feb 11 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
用js实现博客打赏功能
Oct 24 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
Dec 23 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
Dec 28 Javascript
javascript trie前缀树的示例
Jan 29 Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
Sep 27 Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 #Javascript
概述javascript在Google IE中的调试技巧
Nov 24 #Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 #Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
Nov 23 #Javascript
值得分享的Bootstrap Table使用教程
Nov 23 #Javascript
JavaScript面试题(指针、帽子和女朋友)
Nov 23 #Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 #Javascript
You might like
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
php开发工具有哪五款
2015/11/09 PHP
PHP自定义多进制的方法
2016/11/03 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
php和nginx交互实例讲解
2019/09/24 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
原生JS实现瀑布流插件
2018/02/06 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python实现自动解数独小程序
2019/01/21 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
恒华伟业笔试面试题
2015/02/26 面试题
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
房屋出租委托书格式
2014/09/23 职场文书
毕业论文致谢范文
2015/05/14 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
PHP获取学生成绩的方法
2021/11/17 PHP
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python