练习地址:http://www.fgm.cc/learn/lesson2/12.html

总结:

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>

JS学习笔记 - fgm练习 2-12- 全选反选 判断CheckBox是否选中 &&运算符的更多相关文章

  1. JS学习笔记 - fgm练习 2-11- 改变图片路径 var img = new Image(); 图片预加载

    <style> *{ margin: 0;padding: 0; list-style: none; } body{ background: black; } .outer{ margin ...

  2. JS学习笔记 - fgm练习 2-5 - 函数传参 设置div样式

    练习地址:http://www.fgm.cc/learn/lesson2/05.html <script> window.onload = function(){ var oDiv = d ...

  3. JS学习笔记 - fgm练习 - 输入数字求和 正则replace onkeyup事件

    <style> body{font-size: 12px;} .outer{ width: 500px; margin: 0 auto; } span{ color: #999; } in ...

  4. JS学习笔记 - fgm练习 - 鼠标移入/移出div样式改变

    思路: div的默认样式正常设置. 鼠标移入时,发生改变的样式有3个,即 边框颜色,div背景色,字体颜色. 把这三个css改变设置在一个类名下,再通过js给div动态 添加/去除这个类名,实现div ...

  5. JS学习笔记 - fgm练习 - 数字自增 定时器 数字比大小Math.max

    <script> window.onload = function(){ var oP = document.getElementsByTagName('p')[0]; var i = 0 ...

  6. JS学习笔记 - fgm练习 - 限制输入框的字符类型 正则 和 || 或运算符的运用 i++和++i

    <script> window.onload = function(){ var aInp = document.getElementsByTagName('input'); var oS ...

  7. JS学习笔记 - fgm练习 - 输入法下拉框 三元表达式

    <script> window.onload = function() { var oBtn = document.getElementsByTagName('input')[0]; va ...

  8. JS学习笔记 - fgm练习 - 网页换肤

    总结: 1. 点击按钮,div内部变色,边框保持颜色不变. 实现原理:其实本来就把background 和 border 分别设置了同一个颜色,看似是一个整体,其实本来就是分开的. 那么点击的时候,只 ...

  9. JS学习笔记 - fgm练习 - 多按钮控制同个div属性

    总结: 1. 注意body里的结构安排,全部装在大div,避免多次设置不同部分居中. 2. 一排按钮居中:装在大div里,text-align: center; 3. 把相同的部分封装成函数,即 同个 ...

随机推荐

  1. BZOJ2115: [Wc2011] Xor(Dfs树,Xor线性无关组)

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  2. mysql的my.cnf文件详解

    一.缘由 最近要接手数据库的维护工作,公司首选MySQL.对于MySQL的理解,我认为很多性能优化工作.主从主主复制都是在调整参数,来适应不同时期不同数量级的数据. 故,理解透彻my.cnf里的参数是 ...

  3. ios中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)

    创建静态库可能出于以下几个理由: 1.你想将工具类代码或者第三方插件快捷的分享给其他人而无需拷贝大量文件.2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级.3.你想将库共享给其他人,但不想让 ...

  4. vue踩坑- 报错npm ERR! cb() never called!

    在vue项目中引入饿了么elementUI组件的步骤之中,出现以下的错误: D:\my-project-first>npm i element-ui -S Unhandled rejection ...

  5. Vijos——T1053 Easy sssp

    https://vijos.org/p/1053 描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的带权有向图. 要求你写一个程 ...

  6. [Python] String Join

    Let's introduce a new string method, join: >>> nautical_directions = "\n".join([& ...

  7. IOS基础学习日志(七)利用dispatch_once创建单例及使用

    自苹果引入了Grand Central Dispatch (GCD)(Mac OS 10.6和iOS4.0)后,创建单例又有了新的方法,那就是使用dispatch_once函数,当然,随着演进的进行. ...

  8. VTK的安装配置-使用VS2010

    1.CMake的安装 CMake安装是用来对VTK编译前的配置工作.此博客中使用的是CMake2.8.CMake的下载可到https://cmake.org/站点上进行下载. 2.VTK源代码 VTK ...

  9. 7.cocos精灵创建和绘制

    创建Layer层的类 T2LayerSprite.h #pragma once #include "cocos2d.h" USING_NS_CC; class T2LayerSpr ...

  10. 量化派基于Hadoop、Spark、Storm的大数据风控架构--转

    原文地址:http://www.csdn.net/article/2015-10-06/2825849 量化派是一家金融大数据公司,为金融机构提供数据服务和技术支持,也通过旗下产品“信用钱包”帮助个人 ...