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 相关文章推荐
JS解密入门之凭直觉解
Jun 25 Javascript
JS实现的省份级联实例代码
Jun 24 Javascript
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 Javascript
JS脚本实现动态给标签控件添加事件的方法
Jun 02 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
详解webpack 多入口配置
Jun 16 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
Dec 05 Javascript
如何在JavaScript中谨慎使用代码注释
Jun 21 Javascript
RxJS在TypeScript中的简单使用详解
Apr 13 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
Jun 19 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php短域名转换为实际域名函数
2011/01/17 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
javascript parseInt 大改造
2009/09/27 Javascript
最短的IE判断代码
2011/03/13 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
python清理子进程机制剖析
2017/11/23 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
python3 flask实现文件上传功能
2020/03/20 Python
python+pyqt5编写md5生成器
2019/03/18 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
Currentbody美国/加拿大:美容仪专家
2020/03/09 全球购物
公司离职证明范本
2014/01/13 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
先进事迹材料范文
2014/12/29 职场文书
介绍信的写法
2015/01/31 职场文书
佛光寺导游词
2015/02/10 职场文书
工作收入证明模板
2015/06/12 职场文书
社区低保工作总结2015
2015/07/23 职场文书
php中pcntl_fork详解
2021/04/01 PHP
Golang 编译成DLL文件的操作
2021/05/06 Golang
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android