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 相关文章推荐
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
Mar 25 Javascript
简单的js表单验证函数
Oct 28 Javascript
jQuery获取对象简单实现方法小结
Oct 30 Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
Jun 23 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
js实现不提交表单获取单选按钮值的方法
Aug 21 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
Sep 17 Javascript
图解JavaScript中的this关键字
May 28 Javascript
浅谈JavaScript对象与继承
Jul 10 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
JavaScript canvas实现跟随鼠标事件
Feb 10 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php Session存储到Redis的方法
2013/11/04 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
express express-session的使用小结
2018/12/12 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
如何将python中的List转化成dictionary
2016/08/15 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
python实现flappy bird游戏
2018/12/24 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
python的列表List求均值和中位数实例
2020/03/03 Python
浅谈Python 函数式编程
2020/06/20 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
UNIX文件名称有什么规定
2013/03/25 面试题
甲乙双方合作协议书
2014/10/13 职场文书
上课说话检讨书500字
2014/11/01 职场文书
公司捐书倡议书
2015/04/27 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android