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 相关文章推荐
JS 时间显示效果代码
Aug 23 Javascript
Js获取下拉框选定项的值和文本的实现代码
Feb 26 Javascript
js动态控制table的tr、td增加及删除的具体实现
Apr 30 Javascript
js使用removeChild方法动态删除div元素
Aug 01 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
jquery图片倾斜层叠切换特效代码分享
Aug 27 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
Jan 11 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 Javascript
JS实现随机点名器
Apr 12 Javascript
JS中队列和双端队列实现及应用详解
Sep 29 Javascript
vue 虚拟DOM的原理
Oct 03 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验证码类分享
2014/11/18 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
jQuery事件绑定.on()简要概述及应用
2013/02/07 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python实现的简单窗口倒计时界面实例
2015/05/05 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
python简单实现AES加密和解密
2019/03/28 Python
Python测试线程应用程序过程解析
2019/12/31 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
英国网上花店:Bunches
2016/11/29 全球购物
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
食品厂厂长岗位职责
2014/01/30 职场文书
项目总经理岗位职责
2014/02/14 职场文书
2014庆六一活动方案
2014/03/02 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
小学工作总结2015
2015/05/04 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书