在公司实际开发中,会经常遇到复选框全选、多选、统计选中个数的情况,所以总结研究了一些大神的帖子,汇总学习一下!
1.统计被选中复选框的个数
2.点击复选框,执行对应函数
3.获取复选框的状态
4.全选、取消全选动作
1.利用原生JS代码
1)统计被选中复选框的个数
checkbox要是属于同一组的,在复选框的属性内name=”mm”属性要写一致;这样可以通过下面代码获得同一组复选框
var names = document.getElementsByName("mm"); //根据name获取一组内的所有复选框
var count = 0;
for(var i=0; i<names.length; i++) {
if(names[i].checked) { //获取复选框的状态,被选中时,该值为true
count++; //统计被选中复选框的个数
}
//以下是一个完整的测试代码
<html>
<head>
<title>测试复选框checkbox</title>
<script>
function static_num()
{
document.getElementById("btnOperate").onclick = function () {
var arr = new Array();
var items = document.getElementsByName("category");
for (i = 0; i < items.length; i++) {
if (items[i].checked) {
arr.push(items[i].value);
}
}
alert("选择的个数为:" + arr.length);
};
};
</script>
</head>
<body>
<p><input type="checkbox" name="category" value="今日话题" />今日话题 </p>
<p><input type="checkbox" name="category" value="视觉焦点" />视觉焦点</p>
<p><input type="checkbox" name="category" value="财经" />财经</p>
<p><input type="checkbox" name="category" value="汽车" />汽车</p>
<p><input type="checkbox" name="category" value="科技" />科技</p>
<p><input type="checkbox" name="category" value="房产" />房产</p>
<p><input type="checkbox" name="category" value="旅游" />旅游</p>
<p><input id="btnOperate" type="button" value="选择" onclick="static_num()" /></p>
</body>
</html>
2).点击复选框,执行对应函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试checked用法</title>
</head>
<body>
<input type="checkbox" name="category" value="今日话题" id="category"/>今日话题
<script type="text/javascript">
window.onload = function(){
//备注:addEventListener只能和getElementById()函数绑在一起用,若改为getElementsByName()会报错
var check_text = document.getElementById('category');
//addEventListener()方法可以避免在html代码中内嵌 js方法
check_text.addEventListener("click", function () {
if(check_text.checked) {
alert("您已成功选择" + check_text.value);
} else {
alert("取消选择" + check_text.value);
}
});
};
</script>
</body>
</html>
3).获取复选框的状态
如上面两个例子所述,可以通过如下代码,获取多选框状态
items.checked //被选中时值为true,否则为false
4)全选、取消全选动作
下面是一个完整的html测试文件,本例子中,用到了 less.js 来编译css文件,建议还没有接触过less的同学,了解一下less编码,非常简单易学而且高效。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试checked用法</title>
<!--引入 less 样式表-->
<link rel="stylesheet/less" type="text/css" href="./public/css/less-js-checkbox.less">
<!-- 引入less样式文件 -->
<script>less = {env : 'development'}</script>
<script type="text/javascript" src="./public/js/less.js"></script>
<script>less.watch();</script>
</head>
<body>
<!--<input type="checkbox" name="category" value="今日话题" id="category"/>今日话题-->
<!-- div块,显示整个checkbox表 -->
<div class="show_box">
<div class="header_row">
<label for="fruit"><input type="checkbox" name="fruit" id="fruit" value="水果"/>水果</label>
</div>
<div class="list_row">
<label for="apple"><input type="checkbox" name="fruit-items" id="apple" value="苹果"/>苹果</label>
</div>
<div class="list_row">
<label for="banana"><input type="checkbox" name="fruit-items" id="banana" value="香蕉"/>香蕉</label>
</div>
<div class="list_row">
<label for="strawberry"><input type="checkbox" name="fruit-items" id="strawberry" value="草莓"/>草莓</label>
</div>
<div class="list_row">
<label for="peach"><input type="checkbox" name="fruit-items" id="peach" value="桃子"/>桃子</label>
</div>
</div>
<!-- 全选框、取消全选框 -->
<!-- checkbox列表 -->
<script type="text/javascript">
window.onload = function () {
//水果全选框
var fruit = document.getElementById('fruit');
fruit.addEventListener('click', selectAllItems);
fruit.addEventListener('click', undoAllItems);
//子节点全选时,全选按钮勾选
var fruitItems = document.getElementsByName('fruit-items');
for(var i=0; i<fruitItems.length; i++) {
fruitItems[i].addEventListener('click', itemsSelectParent);
}
//选择所有items
function selectAllItems() {
if( fruit.checked) {
var fruitItems = document.getElementsByName('fruit-items');
for(var i=0; i<fruitItems.length; i++) {
if(!fruitItems[i].checked) {
fruitItems[i].checked = true;
}
}
}
}
//取消全选
function undoAllItems() {
if( !fruit.checked) {
var fruitItems = document.getElementsByName('fruit-items');
for(var i=0; i<fruitItems.length; i++) {
if(fruitItems[i].checked) {
fruitItems[i].checked = false;
}
}
}
}
//子节点全选时,全选按钮勾选
function itemsSelectParent() {
var fruit = document.getElementById('fruit');
var fruitItems = document.getElementsByName('fruit-items');
var childStatus = true;
for(var i=0; i<fruitItems.length; i++) {
childStatus = (childStatus && fruitItems[i].checked);
}
if(childStatus) {
fruit.checked = true;
} else {
fruit.checked = false;
}
}
};
</script>
</body>
</html>
下面是less样式表的文件:
@base-font: 16px;
@big-font: 20px;
@border: 1px;
@bg-color: #FFF8E1;
@header-bg-color: #F4565E;
@header-btn-color: #FDE330;
@checked-color: #FEE531;
//div块级显示
.show_box {
width: 400px;
height: 400px;
position: absolute;
top: 50%;
left: 50%;
margin-left: -200px;
margin-top: -200px;
border: @border*2 solid @bg-color;
background-color: @bg-color;
font-size: @base-font;
//首行高亮显示
.header_row {
height: 28px;
padding: 3px 10px;
position: relative;
font-size: @big-font;
background-color: @header-bg-color;
}
//checkbox列表行
.list_row {
height: 30px;
padding: 3px 10px;
}
}