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 call 函数的用法说明
Apr 09 Javascript
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
javascript实现很浪漫的气泡冒出特效
Sep 05 Javascript
js+html5实现的自由落体运动效果代码
Jan 28 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
AngularJS实现路由实例
Feb 12 Javascript
原生js实现可拖拽效果
Feb 28 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
详解Angular-Cli中引用第三方库
May 21 Javascript
JavaScript canvas实现围绕旋转动画
Nov 18 Javascript
js实现内置计时器
Dec 16 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
linux下 C语言对 php 扩展
2008/12/14 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
JavaScript版代码高亮
2006/06/26 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
简单实现js倒计时功能
2017/02/13 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
python sort、sorted高级排序技巧
2014/11/21 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
PyQt5实现登录页面
2020/05/30 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
如何编写优秀的食品项目创业计划书
2014/01/23 职场文书
公益广告语集锦
2014/03/13 职场文书
写景作文评语集锦
2014/12/25 职场文书
会计求职自荐信范文
2015/03/04 职场文书