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 相关文章推荐
php gethostbyname获取域名ip地址函数详解
Jan 24 Javascript
Javascript 通过json自动生成Dom的代码
Apr 01 Javascript
在Windows上安装Node.js模块的方法
Sep 25 Javascript
javascript-简单的计算器实现步骤分解(附图)
May 30 Javascript
js获取字符串最后一位方法汇总
Nov 13 Javascript
基于JavaScript实现div层跟随滚动条滑动
Jan 12 Javascript
Bootstrap安装环境配置教程分享
May 27 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
浅谈angular.js跨域post解决方案
Aug 30 Javascript
9种改善AngularJS性能的方法
Nov 28 Javascript
JavaScript利用键盘码控制div移动
Mar 19 Javascript
JS实现页面侧边栏效果探究
Jan 08 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
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
div li的多行多列 无刷新分页示例代码
2013/10/16 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
Javascript动画效果(2)
2016/10/11 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Django如何使用redis作为缓存
2020/05/21 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
司机检讨书
2014/02/13 职场文书
运动会演讲稿100字
2014/08/25 职场文书
年终工作总结范文2014
2014/11/27 职场文书
优秀班组事迹材料
2014/12/24 职场文书
军训决心书范文
2015/09/22 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python