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
基于jquery的跟随屏幕滚动代码
Jul 24 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
Mar 18 Javascript
jQuery实现的原图对比窗帘效果
Jun 15 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
新入门node.js必须要知道的概念(必看篇)
Aug 10 Javascript
如何实现json数据可视化详解
Nov 24 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
Jan 22 Javascript
基于JavaScript实现图片剪切效果
Mar 07 Javascript
Vue 实现双向绑定的四种方法
Mar 16 Javascript
使用Node.js实现base64和png文件相互转换的方法
Mar 11 Javascript
vue+element UI实现树形表格
Dec 29 Vue.js
完美解决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计算上一个月的今天
2013/05/23 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
JavaScript EasyPager 分页函数
2011/05/25 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
再探JavaScript作用域
2014/09/24 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
vuejs如何配置less
2017/04/25 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
解决vue-cli@3.xx安装不成功的问题及搭建ts-vue项目
2020/02/09 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
python正则实现提取电话功能
2018/02/24 Python
详解python中的hashlib模块的使用
2019/04/22 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
Java详细解析==和equals的区别
2022/04/07 Java/Android