000. 开始

  学习JS有一段时间了,最近看了一些JS练手的小demo实例,自己也尝试着用JS进行实现。

  全选功能是在很多注册页面、获取用户兴趣爱好、让用户勾选一些选项等页面中常见的一种效果,主要有全选/全不选,反选,重置,提交等几个功能。

  现在我们就开一步一步的开始解析代码。另外注意一下,这里面运用到了一些外部的CSS文件和JS文件,单纯的只复制下面的代码可能不会出现你想要的结果,请移步github地址获取完整源代码:

https://github.com/JinganGuo/JavascriptDemos

001. HTML部分

 <!--
@authors Guo Jingan (gja1026@163.com)
@date 2018-02-15
@intro 全选功能
!-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>全选功能练习(CheckAll)</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" type="text/css" href="../commonCSS.css">
<script src="checkAll.js"></script>
</head>
<body>
<header>
<p>全选功能</p>
</header>
<form id="myForm" action="#" method="post">
请选择您的兴趣爱好:
<input type="checkbox" id="checkOrCancelAll"><label for="checkOrCancelAll">全选/取消全选</label> <br><br> <input type="checkbox" name="item" id="football" value="足球"><label for="football">足球</label>
<input type="checkbox" name="item" id="running" value="跑步"><label for="running">跑步</label>
<input type="checkbox" name="item" id="swimming" value="游泳"><label for="swimming">游泳</label>
<input type="checkbox" name="item" id="reading" value="阅读"><label for="reading">阅读</label>
<input type="checkbox" name="item" id="coding" value="写代码"><label for="coding">写代码</label> <br><br> <input type="button" class="button" name="choice" id="checkAll" value="全选">
<input type="button" class="button" name="choice" id="invert" value="反选">
<input type="button" class="button" name="choice" id="reset" value="复位">
<input type="button" class="button" id="submit" value="提交"> </form>
</body>
</html>

   在这个小demo中,第一次学习并运用了<label>标签,将该标签的for属性设置为对应的id属性值,可以在页面中点击文字也能选中对应的checkbox,若不设置便只能点击那个小小的方框才能选中checkbox。

  HTML部分不做介绍,CSS代码也不贴出来了,基本没有什么样。

002. JS部分

  首先,先自定义一个单击响应函数,方便以后我们对指定元素进行单击响应事件绑定。

 /**
*设置单击响应函数
* @param {[String]} objStr [ 要设置单击响应事件的元素的id ]
* @param {[function]} fun [ 单击后响应的行为 ]
* @return {[none]}
*/
function myClick(objStr, fun) {
var obj = document.getElementById(objStr);
obj.onclick = fun;
}

  

  获取所有可以选择的checkbox可选项:

var hobbies = document.getElementsByName("item");

 

  全选/全不选功能,当用户勾选这个checkbox时,所有选项全选;否则,全不选。

  Checkbox对象有一个属性:checked, 可以用来设置或返回 checkbox 是否应被选中。

  为此checkbox添加一个单击响应函数,函数内部对其进行判定,如果它的状态被勾选(即this.checked == true),则将所有的可选项的checked属性设置为false,反之设置为true。

 // 获取全选/全不选选项
var checkOrCancelAll = document.getElementById("checkOrCancelAll"); // 全选/全不选
myClick("checkOrCancelAll", function() {
if(this.checked){
for (var i = 0; i < hobbies.length; i++) {
hobbies[i].checked = true;
}
}else{
for (var i = 0; i < hobbies.length; i++) {
hobbies[i].checked = false;
}
}
});

  全选:将可选项的checked属性设置为ture;

  复位:将可选项的checked属性设置为false;

 // 全选
myClick("checkAll", function() {
for (var i = 0; i < hobbies.length; i++) {
hobbies[i].checked = true;
}
checkOrCancelAll.checked = true;
}); // 复位
myClick("reset", function() {
for (var i = 0; i < hobbies.length; i++) {
hobbies[i].checked = false;
}
checkOrCancelAll.checked = false;
});  

  

  反选:将已经选择的取消,为选择的选中,特别注意那个“全选/全不选”的处理。

 // 反选
myClick("invert", function() {
checkOrCancelAll.checked = true;
for (var i = 0; i < hobbies.length; i++) { if (hobbies[i].checked) {
hobbies[i].checked = false;
checkOrCancelAll.checked = false;
} else {
hobbies[i].checked = true;
}
}
});

  基本功能到目前为止差不多实现了,但是还存在一个问题,当用户依次勾选每一个选项时,当全部勾选完,则“全选/全不选”应当被勾选上,再当用户取消了一个选项,则“全选/全不选”应当被取消。

  这个如何实现呢?

  我们可以为每一个可选项的checkbox添加一个单击响应事件,在响应函数内部,将“全选/全不选”默认勾选上,然后进行判断,若存在没有被勾选上的选项,则“全选/全不选”的checked属性赋值为false。

 // 给每一个checkbox添加一个单击事件
for (var i = 0; i < hobbies.length; i++) {
hobbies[i].onclick = function() {
checkOrCancelAll.checked = true;
for (var i = 0; i < hobbies.length; i++) {
if (!hobbies[i].checked) {
checkOrCancelAll.checked = false;
break;
}
}
};
}

  

  提交

 // 提交
myClick("submit", function(){
var result = new Array();
for (var i = 0; i < hobbies.length; i++) {
if(hobbies[i].checked){
result.push(hobbies[i].value);
}
}
if(result.length){
alert("您的选择是: \n\n" + result);
}else{
alert("您暂时没有勾选任何选项!");
} });

003. 结束

  以上就是全选功能的代码实现,还是很容易实现的,大家也可以自己尝试一下,同时若文章有表述问题或着有该功能更好的实现方式,欢迎讨论。

  一个正努力迈向前端行业的大三狗,记住要不断学习!

JS实现全选功能的更多相关文章

  1. jquery与js实现全选功能的区别---2017-05-12

    一.jquery常用的事件 click(),dbclick() focus(),blur() change() keydown(),keypress(),keyup() mousedown(),mou ...

  2. 使用js实现全选功能。(全选,全不选,反选)

    作业210721 提交代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. JS全选功能代码优化

    原文:JS全选功能代码优化 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能 ...

  4. js初学—实现checkbox全选功能

    布局如下: <p ><input type="checkbox" id="che1"/>全选</p><div id=& ...

  5. S全选功能代码

    JS全选功能代码优化 2014-06-26 00:00 by 龙恩0707, 470 阅读, 3 评论, 收藏, 编辑 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写 ...

  6. EasyUI datagrid 复选框可以多选但不能全选功能实现

    1.功能需求:  实现多选,但是不能够全选功能 2.js代码 //帮卖列表页面,可以多选但是不能够全选实现 $(".datagrid-header-check").children ...

  7. elementUI+JS实现全选与反选

    在实际项目开发过程中,遇到的需求,需要实现全选以及取消全选等功能,主要使用ElementUI + JS来实现,具体代码如下: <!DOCTYPE html> <html lang=& ...

  8. JS checkbox 全选 全不选

    /* JS checkbox 全选 全不选 Html中checkbox: <input type="checkbox" name="cbx" value= ...

  9. C# winform中的datagridview控件标头加入checkbox,实现全选功能。

    /// <summary> /// 给DataGridView添加全选 /// </summary> public class AddCheckBoxToDataGridVie ...

随机推荐

  1. 一、scrapy的下载安装---Windows(安装软件太让我伤心了)

    写博客就和笔记一样真的很有用,你可以随时的翻阅.爬虫的爬虫原理与数据抓取.非结构化与结构化数据提取.动态HTML处理和简单的图像识别已经学完,就差整理博客了 开始学习scrapy了,所以重新建了个分类 ...

  2. Spring bean的生命周期详解

    bean的生命周期1.实例化bean 即new2.按照spring上下文对实例化的bean进行配置 即填充属性,也就是IOC/DI(控制反转,依赖注入)3.如果这个bean实现了BeanNameAwa ...

  3. ansible 检查大量客户端的文件与配置情况

    ansible pro_adservers -m command -a 'w' ansible pro_adservers -m command -a 'hostname' ansible pro_a ...

  4. CentOS 7 NetworkManager Keeps Overwriting /etc/resolv.conf

    In CentOS or Red Hat Enterprise Linux (RHEL) 7, you can find your /etc/resolv.conf file, which holds ...

  5. [HNOI2008] GT考试

    [HNOI2008] GT考试 标签 : DP 矩阵乘法 题目链接 题意 n位数中不出现一个子串的方案数. 题解 \(设dp[i][j]\)为前i位匹配到j时的合法方案数.(所谓合法,就是不能有别的匹 ...

  6. github page博客里添加多说评论插件

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 由于现在我这个博客原来用的是DISQUS评论插件,那全是全球 ...

  7. 通过修改注册表设置windows环境变量

    开发环境搭建每次都要设置很多环境变量, 一般是通过  [菜单]->[计算机]->[属性]->[高级设置]->[环境变量]进行设置,重装系统后,每次都要设置很多环境变量,很麻烦. ...

  8. Python中List和Tuple类型

    a = 'python' print('hello,', a or 'world') b = '' print ('hello,', b or 'world') print('------------ ...

  9. xBIM WeXplorer 设置模型颜色

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  10. Luogu P1078 文化之旅

    题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...