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 相关文章推荐
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
Feb 24 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
Jun 29 Javascript
JS分页控件 可用于无刷新分页
Jul 23 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
Dec 16 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
Aug 02 Javascript
利用Node.JS实现邮件发送功能
Oct 21 Javascript
Bootstrap Modal遮罩弹出层代码分享
Nov 21 Javascript
React组件之间的通信的实例代码
Jun 27 Javascript
JS实现移动端判断上拉和下滑功能
Aug 07 Javascript
VUE路由动态加载实例代码讲解
Aug 26 Javascript
JavaScript实现页面高亮操作提示和蒙板
Jan 04 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
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
理解javascript闭包
2015/12/15 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
vue、react等单页面项目应该这样子部署到服务器
2018/01/03 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
初学vue出现空格警告的原因及其解决方案
2019/10/31 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
Python 功能和特点(新手必学)
2015/12/30 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
Python urllib.request对象案例解析
2020/05/11 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
工作自荐信
2013/12/11 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
六查六看心得体会
2014/10/14 职场文书
省委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers