JS实现全选功能
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实现全选功能的更多相关文章
- jquery与js实现全选功能的区别---2017-05-12
一.jquery常用的事件 click(),dbclick() focus(),blur() change() keydown(),keypress(),keyup() mousedown(),mou ...
- 使用js实现全选功能。(全选,全不选,反选)
作业210721 提交代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- JS全选功能代码优化
原文:JS全选功能代码优化 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之前的简单的JS全选功能 ...
- js初学—实现checkbox全选功能
布局如下: <p ><input type="checkbox" id="che1"/>全选</p><div id=& ...
- S全选功能代码
JS全选功能代码优化 2014-06-26 00:00 by 龙恩0707, 470 阅读, 3 评论, 收藏, 编辑 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写 ...
- EasyUI datagrid 复选框可以多选但不能全选功能实现
1.功能需求: 实现多选,但是不能够全选功能 2.js代码 //帮卖列表页面,可以多选但是不能够全选实现 $(".datagrid-header-check").children ...
- elementUI+JS实现全选与反选
在实际项目开发过程中,遇到的需求,需要实现全选以及取消全选等功能,主要使用ElementUI + JS来实现,具体代码如下: <!DOCTYPE html> <html lang=& ...
- JS checkbox 全选 全不选
/* JS checkbox 全选 全不选 Html中checkbox: <input type="checkbox" name="cbx" value= ...
- C# winform中的datagridview控件标头加入checkbox,实现全选功能。
/// <summary> /// 给DataGridView添加全选 /// </summary> public class AddCheckBoxToDataGridVie ...
随机推荐
- 一、scrapy的下载安装---Windows(安装软件太让我伤心了)
写博客就和笔记一样真的很有用,你可以随时的翻阅.爬虫的爬虫原理与数据抓取.非结构化与结构化数据提取.动态HTML处理和简单的图像识别已经学完,就差整理博客了 开始学习scrapy了,所以重新建了个分类 ...
- Spring bean的生命周期详解
bean的生命周期1.实例化bean 即new2.按照spring上下文对实例化的bean进行配置 即填充属性,也就是IOC/DI(控制反转,依赖注入)3.如果这个bean实现了BeanNameAwa ...
- ansible 检查大量客户端的文件与配置情况
ansible pro_adservers -m command -a 'w' ansible pro_adservers -m command -a 'hostname' ansible pro_a ...
- 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 ...
- [HNOI2008] GT考试
[HNOI2008] GT考试 标签 : DP 矩阵乘法 题目链接 题意 n位数中不出现一个子串的方案数. 题解 \(设dp[i][j]\)为前i位匹配到j时的合法方案数.(所谓合法,就是不能有别的匹 ...
- github page博客里添加多说评论插件
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 由于现在我这个博客原来用的是DISQUS评论插件,那全是全球 ...
- 通过修改注册表设置windows环境变量
开发环境搭建每次都要设置很多环境变量, 一般是通过 [菜单]->[计算机]->[属性]->[高级设置]->[环境变量]进行设置,重装系统后,每次都要设置很多环境变量,很麻烦. ...
- Python中List和Tuple类型
a = 'python' print('hello,', a or 'world') b = '' print ('hello,', b or 'world') print('------------ ...
- xBIM WeXplorer 设置模型颜色
目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...
- Luogu P1078 文化之旅
题目描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...