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]点出统计器
Oct 11 Javascript
jquery中对表单的基本操作代码
Jul 29 Javascript
JS获取页面input控件中所有text控件并追加样式属性
Feb 25 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
May 05 Javascript
JavaScript中扩展Array contains方法实例
Aug 23 Javascript
探讨AngularJs中ui.route的简单应用
Nov 16 Javascript
浅谈React 属性和状态的一些总结
Nov 21 Javascript
JQuery和HTML5 Canvas实现弹幕效果
Jan 04 Javascript
jquery实现图片轮播器
May 23 jQuery
vue轮播图插件vue-awesome-swiper
Nov 27 Javascript
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
Nov 24 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
国内咖啡文化
2021/03/03 咖啡文化
php文档更新介绍
2011/07/22 PHP
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python组合无重复三位数的实例
2018/11/13 Python
wxPython实现分隔窗口
2019/11/19 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
numpy库reshape用法详解
2020/04/19 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
Python合并pdf文件的工具
2021/07/01 Python
PO模式在selenium自动化测试框架的优势
2022/03/20 Python