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 相关文章推荐
层序遍历在ExtJs的TreePanel中的应用
Oct 16 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
Jul 18 Javascript
jQuery实现跟随鼠标运动图层效果的方法
Feb 02 Javascript
JS实现弹性菜单效果代码
Sep 07 Javascript
JavaScript实现多种排序算法
Feb 24 Javascript
js闭包用法实例详解
Dec 13 Javascript
详解本地Node.js服务器作为api服务器的解决办法
Feb 28 Javascript
js实现百度登录框鼠标拖拽效果
Mar 07 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
Feb 18 Javascript
Element Badge标记的使用方法
Jul 27 Javascript
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
AudioContext 实现音频可视化(web技术分享)
Feb 24 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打印输出棋盘的实现方法
2014/12/23 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
2015/06/14 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python实现用户答题功能
2018/01/17 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
最新的大学生找工作自我评价
2013/09/29 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
欢迎横幅标语
2014/06/17 职场文书
公共场所标语
2014/06/30 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
优秀教研组申报材料
2014/12/26 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
参加招聘会后的感想
2015/08/10 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js
python开发人人对战的五子棋小游戏
2022/05/02 Python