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. RDB持久化

    redis是一个内存数据库,所有我们需要将他定时存在磁盘上,如果没有开启AOF,那么会生成RDB文件进行存储,其实就是个二进制文件 RBD文件通过SAVE BGSAVE进行创建, SAVE会阻塞服务器 ...

  2. PyPI使用国内源

    默认的pip源的速度实在无法忍受,于是便搜集了一些国内的pip源,如下: 阿里云 https://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi. ...

  3. python学习:Dmidecode系统信息(一)

    #!/usr/bin/env python   from subprocess import Popen, PIPE   p = Popen(['dmidecode'], stdout=PIPE) d ...

  4. Three.js 学习笔记(1)--坐标体系和旋转

    前言 JavaScript 3D library The aim of the project is to create an easy to use, lightweight, 3D library ...

  5. 拥抱.NET Core系列:MemoryCache 初识

    Cache是一个绝大多数项目会用到的一个技术,说起到缓存可能就联想到 Set.Add.Get.Remove.Clear 这几个方法.那么在.NET Core中微软给我们带来了什么样的缓存体验呢?今天我 ...

  6. 听闰土大话前端之ES6是怎么来的

    前言 相信做前端的朋友没有不知道ECMAScript6的,都知晓ES6新增了不少新的特性,但是你知道ES6是怎么来的吗?今天就让闰土来带大家大话ES6的前世今生.当然了,这篇文章会以扫盲为主,科普为辅 ...

  7. 工作笔记--自动切换host的python code

    修改host代码: #coding:utf-8import os,timepwd = os.path.dirname(__file__) #获取当前文件夹的绝对路径pull_host_cmd = 'a ...

  8. (MonoGame从入门到放弃-2) 初识MonoGame

    上一节记录了大致的搭建MonoGame的环境,默认大家都是都是使用过Visual Studio的,没使用过的话,可以去https://www.visualstudio.com/下载一个试试,社区版免费 ...

  9. 又是一个愚蠢的错误,皆因.xml而起

       论java中的.xml到底有多坑?! 感觉自己都快哭了,再一次被.xml给坑了一下,这次坑的太狠了,一下子导致自己浪费了昨天一下午,一晚上,今天一上午和半个下午呀,中间的过程真的是乏善可陈呀,各 ...

  10. mysql 学习心得3

    1 /0和 %0 都会显示null 2比较运算符大部分和c一样 ==在mysql是=  <>代表不等于 between 指定范围内 in指定几何 isnull 判断是否为null :is ...