jQuery判断checkbox选中状态


Posted in Javascript onMay 12, 2016

前言

神奇的JQuery怎么设置checkbox状态时好时坏?明明同一行代码,断点跟踪确实执行了,但是有时候好使,有时候却没有生效。毕竟对JS不是很熟悉,只是通过JS来处理前端HTML的标签的状态设置时,通过JQuery有时候会更方便些的,但是发现更不好办。

今天尝试实现checkbox全选、全不选功能,与App开发中的效果是一样的,勾选全选则将所有的选项都选中;同样取消勾选某个子项也将全选设置为非选中状态;所有子选项都为选中状态时,将全选设置为选中状态。

由于对JS不是很熟悉,于是尝试各种百度、google,发现出来的文章都是坑爹啊。各种JQuery的,但是为什么我设置了就是没有作用的。起初以为是变量获取不到,于是断点跟踪,对象是取到了的,但是设置JQuery的方法来设置就是没有作用。

搜到的处理方式

这里的checkbox的id为cbxSelectAll,于是尝试这么写:

$('#cbxSelectAll').attr('checked', true);

结果是无效的。再尝试修改为:

$('#cbxSelectAll').attr('checked', 'checked');

结果是第一次设置生效了,再设置就没有生效。坑爹,这到底是什么东西,怎么时好时坏呢?

然后在设置为false时,这么写:

$('#cbxSelectAll').attr('checked', false);

// 也没有作用

//$('#cbxSelectAll').attr('checked', '');

果然是都没有作用。但是通过下面的设置,可以取消选中:

$('#cbxSelectAll').removeAttr('checked');

难道是年代久远,这些方法已经不再有效了吗?

最后解决办法

最后的解决办法还是放弃了JQuery,改用Javascript原生的Dom来设置。

下面是设置为全选或者取消全选状态的代码:

varcheckboxes = document.getElementsByName('selectIds');
varselectedCount = 0;
varunSelectCount = 0;
for (var i = 0; i < checkboxes.length; i++) {
varcheckbox = checkboxes[i];
if(checkbox.tagName == "INPUT" && checkbox.checked){
selectedCount++;
} else if (checkbox.tagName == "INPUT" && checkbox.checked == false) {
unSelectCount++;
}
}
if (selectedCount == checkboxes.length) {
document.getElementById('cbxSelectAll').checked = true;
} else if (unSelectCount != checkboxes.length) {
document.getElementById('cbxSelectAll').checked = false;
}

JQuery获取状态

JQuery通过checkbox的is函数来获取状态:

varisChecked = $('#cbxSelectAll').is(':checked');

之前尝试过使用attr函数来获取,但是获取的值显示为null:

// 显示为null,好生奇怪

varisChecked = $('#cbxSelectAll').attr('checked');

当然,我们也可以直接使用Javascript原生的Dom方式来获取,肯定是没有问题的:

varisChecked = document.getElementById('cbxSelectAll').checked;

小结

玩前端JQuery果然要比玩原生的JavaScript要吃力些,虽然有很多时候可以使代码更方便书写。不过还是两者结合来做吧。

Javascript 相关文章推荐
jquery将一个表单序列化为一个对象的方法
Dec 02 Javascript
js预加载图片方法汇总
Jun 15 Javascript
jQuery实现的经典滑动门效果
Sep 22 Javascript
详解Angularjs中的依赖注入
Mar 11 Javascript
Boostrap模态窗口的学习小结
Mar 28 Javascript
通过sails和阿里大于实现短信验证
Jan 04 Javascript
JavaScript箭头(arrow)函数详解
Jun 04 Javascript
AngularJs每天学习之总体介绍
Aug 07 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
Oct 25 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
JS实现简单九宫格抽奖
Jun 28 Javascript
Bootstrap3制作自己的导航栏
May 12 #Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 #Javascript
jquery ajax局部加载方法详解(实现代码)
May 12 #Javascript
分享12个非常实用的JavaScript小技巧
May 11 #Javascript
分享10个优化代码的CSS和JavaScript工具
May 11 #Javascript
Bootstrap组件(一)之菜单
May 11 #Javascript
Bootstrap 组件之按钮(二)
May 11 #Javascript
You might like
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
PHP中header用法小结
2016/05/23 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
前端构建工具之gulp的配置与搭建详解
2017/06/12 Javascript
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
python按照多个条件排序的方法
2019/02/08 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
python 实现视频 图像帧提取
2019/12/10 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
pygame实现飞机大战
2020/03/11 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
副科竞争上岗演讲稿
2014/05/12 职场文书
商铺门面租房协议书
2014/10/21 职场文书
单位作风建设自查报告
2014/10/23 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
户外活动总结
2015/02/04 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers