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移动和复制dom节点实用DOM操作案例
Dec 17 Javascript
jQuery基础框架浅入剖析
Dec 27 Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 Javascript
jquery给图片添加鼠标经过时的边框效果
Nov 12 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
Mar 10 Javascript
Backbone.js的一些使用技巧
Jul 01 Javascript
JQuery学习总结【二】
Dec 01 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
Dec 19 Javascript
JavaScript模板引擎应用场景及实现原理详解
Dec 14 Javascript
layer iframe 设置关闭按钮的方法
Sep 12 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
Dec 25 Javascript
vue打包npm run build时候界面报错的解决
Aug 13 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
PHP5.3新特性小结
2016/02/14 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
Bootstrap每天必学之导航
2015/11/26 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
Python中暂存上传图片的方法
2015/02/18 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
总结python中pass的作用
2019/02/27 Python
详解Python循环作用域与闭包
2019/03/21 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
私人委托书格式
2014/09/10 职场文书
银行竞聘报告范文
2014/11/06 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
2015中秋节晚会开场白
2015/07/30 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
Vue h函数的使用详解
2022/02/18 Vue.js
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers