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 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
Jul 27 Javascript
JavaScript创建对象的写法
Aug 29 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
Oct 21 Javascript
angularjs之$timeout指令详解
Jun 13 Javascript
详解Vue微信公众号开发踩坑全记录
Aug 21 Javascript
vue 循环加载数据并获取第一条记录的方法
Sep 26 Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
Mar 16 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
Apr 03 Javascript
webpack+vue.js构建前端工程化的详细教程
May 10 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
Aug 31 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 daodb插入、更新与删除数据
2009/03/19 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
详解node.js 事件循环
2020/07/22 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
python批量同步web服务器代码核心程序
2014/09/01 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
财务与信息服务专业推荐信
2013/11/28 职场文书
教师实习自我鉴定
2013/12/13 职场文书
美发店5.1活动方案
2014/01/24 职场文书
科技之星事迹材料
2014/06/02 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
英文道歉信
2015/01/20 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python