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 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
理解JavaScript的caller,callee,call,apply
Apr 28 Javascript
JavaScript DOM 学习第五章 表单简介
Feb 19 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
Aug 17 Javascript
微信公众号 客服接口的开发实例详解
Sep 28 Javascript
JS调用打印机功能简单示例
Nov 28 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
Aug 07 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
JS实现元素上下左右移动效果
Oct 18 Javascript
vue中的ref和$refs的使用
Nov 22 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
Sep 25 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+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
php购物车实现代码
2011/10/10 PHP
Web程序工作原理详解
2014/12/25 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
类似框架的js代码
2006/11/09 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
JavaScript实现英语单词题库
2019/12/24 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
详解python并发获取snmp信息及性能测试
2017/03/27 Python
浅谈python正则的常用方法 覆盖范围70%以上
2018/03/14 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
商务考察邀请函范文
2014/01/21 职场文书
考试作弊检讨书
2014/10/21 职场文书
三年级学生评语大全
2014/12/26 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏