实现效果:
全选按钮:点击全选按钮所有的小按钮都会被选中;点掉全选按钮,所有按钮取消选中;
小按钮:只有全部被选中,全选按钮才会被选中
思路分析:
1、全选和取消全选做法:让下面所有复选框的 checked属性(选中状态)跟随全选按钮即可
使用 this.checked 可以获得当前复选框的状态,如果是true就代表被选中,如果是false就代表没被选中。
注:<input>的 checked 属性是一个布尔属性,checked 属性规定在页面加载时应该被预先选定的<input> 元素。
inp[i].checked = this.checked; 使下面所有的复选框的checked属性值等同于 全选按钮的checked值,跟随全选按钮的状态。
this.checked 得到的是 true或是 false,如果是true,就把true赋值给所有下面的复选框的 checked属性。
想实现全选和取消全选,最核心的思路就在于:把全选按钮当前是否选中的状态,将这个状态赋给下面所有复选框
2、下面的复选框需要全部选中,上面全选按钮才是选中状态的做法:(下面复选框的小按钮有一个没被选中,那么全选按钮也是没被选中的状态)给下面的复选框绑定点击事件,每次点击都要循环查看下面复选框是否还有没被选中的,如果有一个没被选中的,上面全选就不选中。
3、可以设置一个变量来控制全选按钮是选中还是没选中。var flag=true;
代码:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>表单全选+取消全选</title> 6 <style> 7 *{ 8 margin:0;padding: 0; 9 } 10 table{ 11 width:500px; 12 position:relative; 13 margin:100px auto; 14 border-collapse:collapse; 15 border:1px solid #d7d7d7; 16 } 17 thead tr{ 18 background-color:#222; 19 font-weight: 600; 20 color:#e9e9e9; 21 } 22 tbody tr:hover{ 23 background: #F5F5F5; 24 } 25 table tr{ 26 text-align: center; 27 height:30px; 28 } 29 </style> 30 </head> 31 <body> 32 <table border=1> 33 <thead> 34 <tr> 35 <td><input type="checkbox" id='cekall'></td> 36 <td>商品</td> 37 <td>价钱</td> 38 </tr> 39 </thead> 40 <tbody> 41 <tr> 42 <td><input type="checkbox" name="" id=""></td> 43 <td>iPhone 11</td> 44 <td>5999.0</td> 45 </tr> 46 <tr> 47 <td><input type="checkbox" name="" id=""></td> 48 <td>荣耀20</td> 49 <td>2299.0</td> 50 </tr> 51 <tr> 52 <td><input type="checkbox" name="" id=""></td> 53 <td>iPhone XR</td> 54 <td>4499.0</td> 55 </tr> 56 </tbody> 57 </table> 58 </body> 59 <script> 60 61 // 1、全选和取消全选做法:让下面所有复选框的 checked属性(选中状态)跟随全选按钮即可 62 // 获取元素,获取全选按钮和下面小的复选框 63 var cekall = document.getElementById('cekall'); 64 var inp = document.querySelector('tbody').getElementsByTagName('input'); 65 // 注册事件 66 cekall.onclick = function(){ 67 // this.checked 可以得到当前复选框的选中状态,如果是 true 就是选中,如果是 false 就是未选中 68 console.log(this.checked); 69 for(var i=0; i< inp.length; i++){ 70 inp[i].checked = this.checked; 71 } 72 } 73 // 2、下面的复选框要全部选中,上面的全选按钮才能够全部选中,给下面的所有复选框绑定事件,每次点击,都要循环查看下面下面所有的复选框是否有没选中的,如果有没选中的复选框,那么上面的全选按钮就不选中。 74 for(var i = 0; i<inp.length; i++){ 75 inp[i].onclick = function(){ 76 // 设置一个变量来控制按钮是否全部选中 77 var flag = true; 78 // 每次点击下面的复选框都要检查下面的四个小按钮是否被全部选中。 79 for(var i =0; i<inp.length; i++){ 80 if(!inp[i].checked){ 81 flag = false; 82 } 83 } 84 cekall.checked = flag; 85 } 86 } 87 </script> 88 </body> 89 </html>
实现效果:
点击全选按钮