JQuery实现列表中复选框全选反选功能封装(推荐)


Posted in Javascript onNovember 24, 2016

我们在做列表的时候经常会遇到全选,反选进行批量处理问题,例如:

JQuery实现列表中复选框全选反选功能封装(推荐)

我当时就是简单的实现了,然后想封装到公共的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实现列表中复选框全选反选功能封装(推荐)

我发现全选复选框用于和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方法。

以上所述是小编给大家介绍的JQuery实现列表中复选框全选反选功能封装(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
页面版文本框智能提示JS代码
Nov 20 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
Feb 24 Javascript
js parentElement和offsetParent之间的区别
Mar 23 Javascript
利用jquery包将字符串生成二维码图片
Sep 12 Javascript
jQuery javaScript捕获回车事件(示例代码)
Nov 07 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
jQuery模拟select实现下拉菜单功能
Jun 20 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
Jun 12 Javascript
关于jquery form表单序列化的注意事项详解
Aug 01 jQuery
jquery自定义显示消息数量
Dec 19 jQuery
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
从零开始实现Vue简单的Toast插件
Dec 03 Javascript
完美解决IE不支持Data.parse()的问题
Nov 24 #Javascript
JS 终止执行的实现方法
Nov 24 #Javascript
JS/jQuery判断DOM节点是否存在的简单方法
Nov 24 #Javascript
jquery网页日历显示控件calendar3.1使用详解
Nov 24 #Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 #Javascript
原生js实现addclass,removeclass,toggleclasss实例
Nov 24 #Javascript
纯javascript版日历控件
Nov 24 #Javascript
You might like
PHP中source #N问题的解决方法
2014/01/27 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
javascript与有限状态机详解
2014/05/08 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
平面设计岗位职责
2013/12/14 职场文书
老公爱的承诺书
2014/03/31 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
房贷工资证明范本
2015/06/12 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
JavaScript实现优先级队列
2021/12/06 Javascript
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python