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 页面输出值
Nov 30 Javascript
对象特征检测法判断浏览器对javascript对象的支持
Jul 25 Javascript
javascript中的if语句使用介绍
Nov 20 Javascript
2014最热门的JavaScript代码高亮插件推荐
Nov 25 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
AngularJS ng-style中使用filter
Sep 21 Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
解决vue打包css文件中背景图片的路径问题
Sep 03 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
js中!和!!的区别与用法
May 09 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 Global定义全局变量使用说明
2013/08/15 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
使用jQuery监听DOM元素大小变化
2016/02/24 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
js实现全选和全不选
2020/07/28 Javascript
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
pytorch的batch normalize使用详解
2020/01/15 Python
学python需要去培训机构吗
2020/07/01 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
水电工岗位职责
2014/02/12 职场文书
法定代表人身份证明书
2014/09/10 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
史上最牛辞职信
2015/05/13 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书