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 相关文章推荐
基于jquery的让textarea自适应高度的插件
Aug 03 Javascript
Jquery中getJSON在asp.net中的使用说明
Mar 10 Javascript
面向对象设计模式的核心法则
Nov 10 Javascript
javascript 获取浏览器版本
Jan 21 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
May 16 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
Jun 08 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
Dec 23 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
Apr 07 Javascript
解决vue router使用 history 模式刷新后404问题
Jul 19 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 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错误提示的关闭方法详解
2013/06/23 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
深入了解javascript中的prototype与继承
2013/04/14 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
python3 使用traceback定位异常实例
2020/03/09 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
公关关系专员的自我评价分享
2013/11/20 职场文书
给朋友的道歉信
2014/01/09 职场文书
销售人员获奖感言
2014/02/05 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
护士节慰问信
2015/02/15 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
趣味运动会加油词
2015/07/18 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
golang使用map实现去除重复数组
2022/04/14 Golang
2022年显卡天梯图(6月更新)
2022/06/17 数码科技