手写场景 | 手写全选框
需求
手写全选框
设置一个全选框和全不选框以及若干个选择框
要求如下:
- 选中全选框或者全不选框:其余若干个选择框都要选中或者不选
- 选中若干个选择框全部选中/不选时:全选框和全不选框自动选上
知识储备
- 选择框:
<input type='checkbox'>
- 通过
.checked
属性判断选择框是否被选择,true为选择,false为不选择 - 通过控制
xxx.checked = true
控制选中,同理通过控制xxx.checked = false
控制不选中
实现思路
1. 全选框思路
通过监听全选框的click事件,获取全选框的checked的状态,获取到状态之后,则遍历选择框,将选择框的状态设置为和全选框状态一样
2. 全不选框思路
通过监听全不选框的click事件,获取全不选框的checked的状态,获取到状态之后,则遍历选择框,将选择框的状态设置为和全不选框状态相反
3. 选择框思路
通过对每一个选择框增加click事件,获取checked状态为true的选择框的数量,根据不同的情况处理全选框和全不选框
- 情况1:数量为0 => 设置全不选框checked属性为true,全选框为false
- 情况2:数量不为0
- 数量等于选择框数量 => 设置全不选框checked属性为false,全选框为true
- 数量不等于选择框数量 => 设置全不选框checked属性为false,全选框为false
4. 细节处理
全选和全不选永远是互斥的
所以在对全不选和全选框事件监听的时候,不仅仅要改变选择框的状态,也要改变对方的状态
JS原生实现
1 |
|
实现效果
全选 全不选
选择1
选择2
选择3
选择4
选择5
选择6