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 相关文章推荐
javascript中注册和移除事件的4种方式
Mar 20 Javascript
jquery获取元素值的方法(常见的表单元素)
Nov 15 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
Jun 01 Javascript
JavaScript进阶练习及简单实例分析
Jun 03 Javascript
layui前段框架日期控件使用方法详解
May 19 Javascript
javascript 开发之网页兼容各种浏览器
Sep 28 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
Jan 03 Javascript
bootstrap下拉框动态赋值方法
Aug 10 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 Javascript
jquery实现动态改变css样式的方法分析
May 27 jQuery
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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
php 获取mysql数据库信息代码
2009/03/12 PHP
解析PHP可变函数的经典用法
2013/06/20 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
清洁工表扬信
2014/01/08 职场文书
大学学习生活感言
2014/01/18 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
法定代表人身份证明书
2015/06/18 职场文书
Python开发五子棋小游戏
2022/04/28 Python