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 源代码显示控件 (Ajax加载方式).
May 18 Javascript
this和执行上下文实现代码
Jul 01 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
Backbone.js中的集合详解
Jan 14 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
JQuery中ajax方法访问web服务实例
Jul 18 Javascript
深入解析JavaScript编程中的this关键字使用
Nov 09 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
Jan 18 Javascript
原生js仿jquery animate动画效果
Jul 13 Javascript
基于JavaScript实现无缝滚动效果
Jul 21 Javascript
Element Input组件分析小结
Oct 11 Javascript
使用Bootstrap做一个朝代历史表
Dec 10 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调用三种数据库的方法(2)
2006/10/09 PHP
php win下Socket方式发邮件类
2009/08/21 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
2017/06/27 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
php-fpm中max_children的配置
2019/03/15 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
javascript基于HTML5 canvas制作画箭头组件
2014/06/25 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
linux面试题参考答案(7)
2014/07/24 面试题
药品质量检测应届生求职信
2013/11/14 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
学校安全工作制度
2014/01/19 职场文书
5s推行计划书
2014/05/06 职场文书
年终奖发放方案
2014/06/02 职场文书
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技