最终效果
实现功能
- 点击全选, 全部的复选框全选, 全选文字变成全不选
- 点击全不选, 全部的复选框所有不选, 全不选文字变成全选
- 复选框能够单个点击
- 点击反选, 全部复选框状态取反
- 若是全部复选框选中, 则全选文字变成全不选
- 若是有复选框没有选中, 则全不选文字变成全选
最终代码
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>复选框(checkbox)全选/全不选/返选</title>
<style> body, dl, dt, dd, p { margin: 0; padding: 0; } body { font-family: Tahoma; font-size: 12px; } label, input, a { vertical-align: middle; } label { padding: 0 10px 0 5px; } a { color: #09f; text-decoration: none; } a:hover { color: red; } dl { width: 120px; margin: 10px auto; padding: 10px 5px; border: 1px solid #666; border-radius: 5px; background: #fafafa; } dt { padding-bottom: 10px; border-bottom: 1px solid #666; } dt label { font-weight: 700; } p { margin-top: 10px; } </style>
</head>
<body>
<dl>
<dt>
<input type="checkbox" id="checkAll" />
<label>全选</label>
<a href="javascript:;">反选</a>
</dt>
<dd>
<p>
<input type="checkbox" name="item" />
<label>选项(一)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(二)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(三)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(四)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(五)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(六)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(七)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(八)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(九)</label>
</p>
<p>
<input type="checkbox" name="item" />
<label>选项(十)</label>
</p>
</dd>
</dl>
<center>
一、切换全选/全不选文字;
<br />
<br />
二、根据选中个数更新全选框状态;
</center>
<script src="demo.js"></script>
</body>
</html>
复制代码
window.onload = function(){
var oSelectAll = document.querySelector("#checkAll");
var oInvertSelect = document.querySelector("a");
var aCheckbox = document.querySelectorAll('p>input');
var oSelectAllLabel = document.querySelector('dt>label');
oSelectAll.onclick = function(){
for(var i = 0;i<aCheckbox.length;i++){
aCheckbox[i].checked = this.checked;
}
isSelectAll();
}
for (var i = 0; i < aCheckbox.length; i++) {
aCheckbox[i].onclick = isSelectAll;
}
function isSelectAll(){
var count = 0;
for (var i = 0; i < aCheckbox.length; i++) {
if(aCheckbox[i].checked){
count++;
}
}
if(count == aCheckbox.length){
oSelectAll.checked = true;
oSelectAllLabel.innerHTML = "全不选";
}else{
oSelectAll.checked = false;
oSelectAllLabel.innerHTML = "全选";
}
}
oInvertSelect.onclick = function(){
for (var i = 0; i < aCheckbox.length; i++) {
aCheckbox[i].checked = !aCheckbox[i].checked;
}
isSelectAll();
}
}
复制代码
专栏地图
- [作特效, 学JS] -- 00 开篇
- [作特效, 学JS] -- 01 超连接鼠标移入变大变红, 鼠标移除还原
- [作特效, 学JS] -- 02 鼠标移入, div变大变红, 鼠标移出, 回复原貌
- [作特效, 学JS] -- 03 网页换肤
- [作特效, 学JS] -- 04 复选框全选
- [作特效, 学JS] -- 05 复选框全选/全不选
- [作特效, 学JS] -- 06 复选框全选/全不选/反选
- [作特效, 学JS] -- 07 网页选项卡
- [作特效, 学JS] -- 08 倒计时
- [作特效, 学JS] -- 09 正经的 全选和反选
- [作特效, 学JS] -- 10 自动生成表格
- [作特效, 学JS] -- 11 加餐-神奇的正则表达式
- [作特效, 学JS] -- 12 加餐-DOM扩展
- [作特效, 学JS] -- 13 加餐-聊聊BOM