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 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
Oct 11 Javascript
很好用的js日历算法详细代码
Mar 07 Javascript
JavaScript加强之自定义event事件
Sep 21 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
JavaScript拆分字符串时产生空字符的解决方案
Sep 26 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 Javascript
jQuery+CSS实现简单切换菜单示例
Jul 27 Javascript
jQuery Ajax请求后台数据并在前台接收
Dec 10 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
详解JavaScript实现动态的轮播图效果
Apr 29 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
解决中英文字符串长度问题函数
2007/01/16 PHP
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
Python入门篇之函数
2014/10/20 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
最新的互联网创业计划书
2014/01/10 职场文书
大学运动会通讯稿
2014/01/28 职场文书
优秀党员获奖感言
2014/02/18 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
电话客服工作职责
2014/07/27 职场文书
董事长助理岗位职责
2015/02/11 职场文书
导游词之岳阳楼
2019/09/25 职场文书