总结:
1. && 运算符,从左向右依次执行,如果遇到 false,就不再继续执行后面的语句。 相当于if(oInput[i].checked) {n++;}
oInput[i].checked && n++
2. n == oInput.length - 1; 这句话先判断 n是不是等于oInput.length - 1 (即checkbox全都选中了)? 返回值 true/false ,再赋值给左边的oInput[0].checked
记住:这种类似于三元表达式的,都是先判断右边,再赋值给左边。
oInput[0].checked = n == oInput.length - 1;
3. 文字变化:全选/全不选, 也是公共事件,所以应该提取到公共函数里。 而不是单独给每个事件都加。
oBtn_selectAll.onclick = function()
{
checkOrNot(aBox);
// oTxt_selectAll.innerHTML = oBtn_selectAll.checked? "全不选" : "全选";
// 这个应该放到公共函数里,因为点其他checkbox,或者点 反选,都会引起文字变化。
};
疑问:
这个函数用var的形式写在window.onload里, 和用function写在window onload外面,区别是???
var checkOrNot = function ()
{
for(let i=0; i<aBox.length; i++)
{
if(oBtn_selectAll.checked==true)
{
aBox[i].checked = true;
}
else
{
aBox[i].checked = false;
};
oTxt_selectAll.innerHTML = oBtn_selectAll.checked? "全不选" : "全选";
};
};
示例程序:
<script type="text/javascript">
window.onload = function ()
{
var oA = document.getElementsByTagName("a")[0];
var oInput = document.getElementsByTagName("input");
var oLabel = document.getElementsByTagName("label")[0];
var isCheckAll = function ()
{
for (var i = 1, n = 0; i < oInput.length; i++)
{
oInput[i].checked && n++
// && 运算符,从左向右依次执行,如果遇到 false,就不再继续执行后面的语句。
// 相当于if(oInput[i].checked) {n++;}
}
oInput[0].checked = n == oInput.length - 1;
// n == oInput.length - 1; 返回值 true/false 赋值给左边。
// 记住:这种类似于三元表达式的,都是先判断右边,再赋值给左边。
oLabel.innerHTML = oInput[0].checked ? "全不选" : "全选"
};
//全选/全不选
oInput[0].onclick = function ()
{
for (var i = 1; i < oInput.length; i++)
{
oInput[i].checked = this.checked
}
isCheckAll()
};
//反选
oA.onclick = function ()
{
for (var i = 1; i < oInput.length; i++)
{
oInput[i].checked = !oInput[i].checked
}
isCheckAll()
};
//根据复选个数更新全选框状态
for (var i = 1; i < oInput.length; i++)
{
oInput[i].onclick = function ()
{
isCheckAll()
}
}
}
</script>
自己的:
(逻辑还没完全理清,还要重写)
<script>
window.onload = function()
{
var oBtn_selectAll = document.getElementsByTagName('input')[0];
var oTxt_selectAll = document.getElementsByTagName('strong')[0];
var oBtn_selectOrNot = document.getElementsByTagName('span')[0];
var aBox = document.getElementsByTagName('ul')[0].getElementsByTagName('input');
var checkOrNot = function ()
// 这个函数用var的形式写在window.onload里, 和用function写在window onload外面,区别是???
{
for(let i=0; i<aBox.length; i++)
{
if(oBtn_selectAll.checked==true)
{
aBox[i].checked = true;
}
else
{
aBox[i].checked = false;
};
oTxt_selectAll.innerHTML = oBtn_selectAll.checked? "全不选" : "全选";
};
};
// 下面是范例公共函数部分的用法
var isCheckAll = function ()
{
for (var i = 1, n = 0; i < oInput.length; i++)
{
oInput[i].checked && n++
// && 运算符,从左向右依次执行,如果遇到 false,就不再继续执行后面的语句。
// 相当于if(oInput[i].checked) {n++;}
}
oInput[0].checked = n == oInput.length - 1;
// n == oInput.length - 1; 返回值 true/false 赋值给左边。
// 记住:这种类似于三元表达式的,都是先判断右边,再赋值给左边。
oLabel.innerHTML = oInput[0].checked ? "全不选" : "全选"
};
// 全选/全不选
oBtn_selectAll.onclick = function()
{
checkOrNot(aBox);
// oTxt_selectAll.innerHTML = oBtn_selectAll.checked? "全不选" : "全选";
// 这个应该放到公共函数里,因为点其他checkbox,或者点 反选,都会引起文字变化。
};
// 反选
oBtn_selectOrNot.onclick = function()
{
oBtn_selectAll.checked = oBtn_selectAll.checked == true? false:true;
checkOrNot(aBox);
};
};
</script>