最終效果
實現功能
- 點擊全選, 全部的複選框全選, 全選文字變成全不選
- 點擊全不選, 全部的複選框所有不選, 全不選文字變成全選
- 複選框能夠單個點擊
- 點擊反選, 全部複選框狀態取反
- 若是全部複選框選中, 則全選文字變成全不選
- 若是有複選框沒有選中, 則全不選文字變成全選
最終代碼
<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