前端练习题——JavaScript 表单的全选/全不选、反选,以及隔行换色

思路

1.全选/全不选:通过获取 “全选选项” 的状态(是否打勾),判断其他选项是否要打勾
2.反选:获取其他选项的状态,判断并且取反(优化:不需要判断状态,使用逻辑非直接取反)
3.用户自己为选项打勾时(每个勾选一个选项时都要判断),如果全部选中,自动将 “全选选项” 选中;反之,取消。
4.如果点击反选时,其他选项全被选中,则自动将 “全选选项” 选中;反之,取消

感悟

采坑

  • 不要将id之类的名称设置与函数名称相同
  • js中checked 是一个boolean类型的值,但是不能再html中设置checked=“false”/checked=“true”
  • 一个函数完成多个功能时,最好将之拆分成多个函数
  • 设置全局变量时,考虑一下,当直接调用是否能取值
  • document.getElementsByName获取的是一个数组,需要通过遍历等方式取值~

代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>表单</title>
		 <style>
	        td{
	            border: 1px solid rebeccapurple;
	            width: 150px;
	            text-align: center;
	        }
	   	 </style>
	</head>
	<body>
		<table id="form1" style="margin: auto; margin-top: 100px;">
			<thead>
				<tr>
				    <td>
				    	<input type="checkbox" id="check" > 全选
				    	<input type="button" id="fancheck" value="反选" style="font-size: 16px;">
				    </td>
				    <td>编号</td>
				    <td>姓名</td>
				    <td>年龄</td>
				    
				</tr>
			</thead>
			<tbody id="tbody">
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>1</td>
				    <td>张三</td>
				    <td>18</td>
				</tr>
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>2</td>
				    <td>李四</td>
				    <td>18</td>
				</tr>
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>3</td>
				    <td>王五</td>
				    <td>19</td>
				</tr>
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>4</td>
				    <td>赵六</td>
				    <td>17</td>
				</tr>
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>5</td>
				    <td>田七</td>
				    <td>20</td>
				</tr>
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>6</td>
				    <td>王八</td>
				    <td>19</td>
				</tr>
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>7</td>
				    <td>秦九</td>
				    <td>17</td>
				</tr>
				<tr>
				    <td><input type="checkbox" name="user" onclick="setcheck()"></td>
				    <td>8</td>
				    <td>谢十</td>
				    <td>20</td>
				</tr>
			</tbody>
		</table>
</body>
	
<script>
	//1.全选,全不选
    document.getElementById("check").onclick = function(){
    	var dianji = document.getElementById("check").checked;//获取当前状态(选中,没选中)。checked:boolean值
    	var dianji_son = document.getElementsByName("user");
    	if(dianji){//代表打钩
    		for (var i=0;i<dianji_son.length;i++) {
    			dianji_son[i].checked = true;
    		}
    	}
    	else{//代表取消打钩
    		for (var i=0;i<dianji_son.length;i++) {
  				dianji_son[i].checked = false;  			
    		}
    	}
    	
    }
     
    //2.反选
    document.getElementById("fancheck").onclick = function(){
    	/*var fancheck = document.getElementById("fancheck").checked;
    	var check_son0 = document.getElementsByName("user");
    	if(fancheck){
	    	for (var i=0;i<check_son0.length;i++) {
	    		if(check_son0[i].checked)	
	    			check_son0[i].checked = false;
	    		else
	    			check_son0[i].checked = true;
	    		
	    	}
	    }
    	else{
	    	for (var i=0;i<check_son0.length;i++) {
	    		if(check_son0[i].checked)	
	    			check_son0[i].checked = false;
	    		else
	    			check_son0[i].checked = true;
	    		
	    	}
	    }*/
	   //优化
	   var check_son0 = document.getElementsByName("user");
	   for (var i=0;i<check_son0.length;i++) {
	   		check_son0[i].checked = !check_son0[i].checked;
	   }
	 /* 4.*/ setcheck();
    }
    
    //3.判断选项是否都选了
    function allcheck(){
    	var cha = document.getElementsByName("user");
    	for (var i=0;i<cha.length;i++) {
    		if(!cha[i].checked){//如果没有全选
    			return false;
    		}
    	}
    	return true;
    }
 
    //调用上述判断函数,并为全选选项赋值
    function setcheck(){
    	var all = document.getElementById("check");
    	all.checked = allcheck();
    }







    //隔行换色
    var form0 = document.getElementById("form1");
//  alert(form0.rows.length);
    for (var i=0;i<form0.rows.length;i+=2) {
    	form0.rows[i].style.backgroundColor = "#eee";
    }
    
</script>


</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值