JS利用复选框实现全选和反选

需求:

    A.全选: 点击全选,所有选项被选中;
    B.全不选:全选情况下再次点击全选框,所有选项都不选;
    C:全选情况下,取消某一个或几个子选项,全选框也变为不选中;
       没有点击全选的情况下,选中了所有子选项,全选框自动选中。


代码示例:

html代码:
<table>
<tr></td><input type="checkbox" name="chb[]" id="all" onclick="setChecked(this)"/>全选</td></tr>
<tr></td><input type="checkbox" name="chb[]"  onclick="setChecked(this)"/>1选</td></tr>
<tr></td><input type="checkbox" name="chb[]"  onclick="setChecked(this)"/>2选</td></tr>
<tr></td><input type="checkbox" name="chb[]"  onclick="setChecked(this)"/>3选</td></tr>
<tr></td><input type="checkbox" name="chb[]"  onclick="setChecked(this)"/>4选</td></tr>
</table>
 
JAvaScript代码:
 
<script>  
    function setChecked(obj) 
	{  
        
        var chbs=document.getElementsByName("chb[]");//获取到复选框的名称  
       
	//全选
	//JS的if判断中Undefined类型视为false,其他类型视为true;
	//obj.id是定义过的值,类型为非Undefined,所以视为true。
    if(obj.id)
	{
		for(var i=1;i<chbs.length;i++)
		{  		
		//若全选框的结果为选中,则进行全选操作,否则进入下一步
		//obj.checked表示复选框当前状态,已选为true,未选为false。
		    if(obj.checked == true)
			{ 
				var chb = chbs[i];
				chb.checked = true;
			}           
		}  		
		
		//全不选
		for(var i=1;i<chbs.length;i++)
		{  
		//若全选框的结果为没选中,则进行全不选操作,否则进入下一步	
		if(obj.checked == false)
			{
				var chb = chbs[i];
				chb.checked = false;
			}         
		}  		
	}else
   {
		//若子选择全选,全选框也选中。
	    if(chbs[1].checked && chbs[2].checked && chbs[3].checked && chbs[4].checked)
	    {	
			chbs[0].checked = true;			
	    }else//若子选项没有全选,全选框不选中。
	    {		
			chbs[0].checked = false;			  
	    }
	}	
}

效果演示:


 

欢迎关注我的公众号——数据杨公子。本公众号会分享包括但不限于大数据、数据治理、元数据管理、python 等方面的技术文章,主旨是和大家一起共同成长,用技术来认识我们这个数据的时代。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JKJ6DjY6-1582591094615)(https://img.hacpai.com/file/2020/02/image-346a3140.png)]

Vue3中实现复选框全选反选功能可以通过以下步骤实现: 1. 在data中定义一个allChecked变量,用于表示是否全选。 2. 在data中定义一个testList数组,用于存储需要进行全选反选的数据。 3. 在created钩子函数中,对testList数组中的每个元素添加一个isChecked属性,用于表示该元素是否被选中。 4. 在watch中监听testList数组的变化,当testList数组中的元素被选中或取消选中时,判断是否全部选中,如果全部选中,则将allChecked变量设置为true,否则设置为false。 5. 在methods中定义handleAllChecked方法,用于实现全选反选功能。该方法接收一个参数v,用于表示是否全选。当v为true时,将testList数组中的每个元素的isChecked属性设置为true,否则设置为false。 6. 在methods中定义handleChecked方法,用于处理单个复选框的选中状态。该方法接收两个参数,item表示当前选中的元素,e表示当前元素的选中状态。当e为true时,将item的isChecked属性设置为true,否则设置为false。 下面是示例代码: ```javascript <template> <div> <input type="checkbox" v-model="allChecked" @change="handleAllChecked($event.target.checked)">全选 <div v-for="(item, index) in testList" :key="index"> <input type="checkbox" v-model="item.isChecked" @change="handleChecked(item, $event.target.checked)"> {{ item.id }} </div> </div> </template> <script> export default { data () { return { allChecked: false, testList: [ { id: 1, isChecked: false }, { id: 2, isChecked: false }, { id: 3, isChecked: false }, { id: 4, isChecked: false }, { id: 5, isChecked: false } ] } }, watch: { testList: { handler (val) { let i = 0 val.forEach(item => { if (item.isChecked === true) { i++ } }) if (i === val.length) { this.allChecked = true } else { this.allChecked = false } }, deep: true } }, methods: { handleAllChecked (v) { this.testList.forEach(item => { item.isChecked = v }) }, handleChecked (item, e) { item.isChecked = e } } } </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值