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. 让我们一起摇摆 Turnipbit体感遥控车

    相信大家对Microbit是非常熟悉的,而今天我们做的这个小玩具所用的核心板是Turnipbit,是基于 Microbit开发的一块适合儿童适用的板卡.基本使用原理是一样的,这里就不多介绍了,代码这方 ...

  2. weblogic修改jdk版本遇到的问题与解决方法

    1.修改setDomainEnv ,路径.../domains/xx_domain\bin\ 1.1修改JAVA_HOME为需要修改的路径 注意:BEA_JAVA_HOME路径不需修改 2.修改路径后 ...

  3. IOS设备设计完整指南

    作为初学者,常常不知如何下手设计,IOS应用UI设计中碰到的种种基础小问题,在此都将一一得到解答.这份完整的设计指南将带你快速上手,为IOS设计出优雅的应用吧. 关于此设计指南 此设计指南描述的是如何 ...

  4. 置换群、Burnside引理与等价类计数问题

    置换群.Burnside引理与等价类计数问题 标签: 置换群 Burnside引理 置换 说说我对置换的理解,其实就是把一个排列变成另外一个排列.简单来说就是一一映射.而置换群就是置换的集合. 比如\ ...

  5. ajax请求中contentType与dataType区别

    contentType: 告诉服务器,我要发什么类型的数据,默认值: "application/x-www-form-urlencoded". dataType:告诉服务器,我要想 ...

  6. Python 中的闭包

    通常来说,函数中的局部变量在函数调用结束的时候不能再被引用,所分配的空间也会被回收. 但是通过闭包这种技术,函数调用结束了,它的局部变量的值还可以保存在闭包里. 试举一例: def make_adde ...

  7. 接口-以PHP为例

    <?php //使用程序模拟现实情况 //使用规范(方法/属性) interface iUSB { public function start(); public function stop() ...

  8. 编程中&和&&的区别

    逻辑电路中用&: 与门电路,全真为真,有假为假. 编程中:&表示取地址符(C)和 按位与(非bool类型时,转换成二进制,按位与运算). &&表示逻辑与运算,& ...

  9. 压缩tar命令

    option z表示压缩,所以才有后面的.gz, c表示创建这个压缩包,v是可视,能看到其打包和压缩的过程,f表示文件 zcvf 命令格式为 先压缩后跟压缩的目录 tar zcvf /home/xia ...

  10. Java线程编程中isAlive()和join()的使用详解

    一个线程如何知道另一线程已经结束?Thread类提供了回答此问题的方法. 有两种方法可以判定一个线程是否结束.第一,可以在线程中调用isAlive().这种方法由Thread定义,它的通常形式如下: ...