jqury简易实现checkbox反选与全选

前段时间,一个同事让我帮忙写个全选与反选的功能,本来一段很简单的代码,突然卡顿,写了好几个小时,其实之前也做过类似的功能,只是一下子就懵逼了,简而言之还是自己对checkbox的反选与全选没有掌握十足,所以再利用一些时间重复巩固了这个小功能,代码不长,想到了就简单,没想到就折腾好久。

就自己遇到一些坑,关于checkbox细谈一二,今天只用jquery实现

下面是html代码

<p><label><input type="checkbox" class="selectAll"/>全选</label></p>
  	<p><label><input type="checkbox" name="item"/>1</label></p>
  	<p><label><input type="checkbox" name="item"/>2</label></p>
  	<p><label><input type="checkbox" name="item"/>3</label></p>
  	<p><label><input type="checkbox" name="item"/>4</label></p>

	<p>
		<label><input type="checkbox" class="sel"/>全选</label>
		<label><input type="checkbox" name="items"/>5</label>
		<label><input type="checkbox" name="items"/>6</label>
		<label><input type="checkbox" name="items"/>7</label>
		<label><input type="checkbox" name="items"/>8</label>
	</p>
  	<p>
		<label><input type="checkbox" class="sel"/>全选</label>
		<label><input type="checkbox" name="items"/>9</label>
		<label><input type="checkbox" name="items"/>10</label>
		<label><input type="checkbox" name="items"/>11</label>
		<label><input type="checkbox" name="items"/>12</label>
		<label><input type="checkbox" name="items"/>13</label>
	</p>
  	<p>
		<label><input type="checkbox" class="sel"/>全选</label>
		<label><input type="checkbox" name="items"/>a</label>
		<label><input type="checkbox" name="items"/>b</label>
		<label><input type="checkbox" name="items"/>c</label>
		<label><input type="checkbox" name="items"/>d</label>
	</p>
  	<p>
		<label><input type="checkbox" class="sel"/>全选</label>
		<label><input type="checkbox" name="items"/>ded</label>
		<label><input type="checkbox" name="items"/>ded</label>
		<label><input type="checkbox" name="items"/>3ded</label>
	</p>

以下是js代码

<script type=‘text/javascript‘>
  		(function(){

  			$(".selectAll").click(function(){
  				$("input[name=item]").prop("checked",this.checked)
  			});
			$("input[name=item]").on("click",function(){
				var k = 0;
				$("input[name=item]").each(function(i,item){
					if(item.checked){
						k++;
					}
					if(k == $("input[name=item]").length){
						$(".selectAll").prop("checked",true)
					}else{
						$(".selectAll").prop("checked",false)
					}
				})
			});
			//针对另外一种场景
			$(".sel").click(function(){
				$(this).parent().nextAll().find("input[name=items]").prop("checked",this.checked);
			});
			$("input[name=items]").click(function(){
				var items = $(this).parent().parent().find("input[name=items]");

					var j = 0;//定义一个变量
					for(var i=0;i<items.length;i++){
						if(items[i].checked){
							j++;
						}
					};
					//用j的值与items的长度做比较,如果j的值等于items的长度,则说明全选
					if(j==items.length){
						$(this).parent().parent().find(".sel").prop("checked",true)
					}else{
						$(this).parent().parent().find(".sel").prop("checked",false)
					}

			})

  		})()

  	</script>

  具体实现效果如下图:

在全选中是有坑的,当你使用在使用jqery中的attr方法时,你的全选和反选只能生效一次,再次重复点击时,就会无效。

1 $(".selectAll").click(function(){
2                   $("input[name=item]").attr("checked",this.checked)
3               });

此时你看到的效果就是这样的:

其实用attr()方法给checkbox作为全选与反选是存在问题的,当重复点击全选按钮,所有的的item中的checked只能动态改变一次,而不是你点击全选按钮就能重复改变item的checked的值。

综上所述:关于checkbox在全选与反选时,还是尽量使用jquery中提供的prop()方法,这样避免了和我当初一样,懵逼半天。

关于点击子chekbox选项,当所有checkbox都选上时,全选按钮才选上,只要有一个item的checkbox没选上,全选按钮就不选上,这里巧妙的利用一个变量值与所有items的长度做比较,如果条件里面仅用一个布尔值做判断,则会存在覆盖问题,这里的坑可以自己尝试一下,功能做完了,理解起来不是那么困难,以上代码根据自己适合的场景做修改即可。

<script type=‘text/javascript‘>  (function(){    $(".selectAll").click(function(){  $("input[name=item]").prop("checked",this.checked)  });$("input[name=item]").on("click",function(){var k = 0;$("input[name=item]").each(function(i,item){if(item.checked){k++;}if(k == $("input[name=item]").length){$(".selectAll").prop("checked",true)}else{$(".selectAll").prop("checked",false)}})});//针对另外一种场景$(".sel").click(function(){$(this).parent().nextAll().find("input[name=items]").prop("checked",this.checked);});$("input[name=items]").click(function(){var items = $(this).parent().parent().find("input[name=items]");var j = 0;//定义一个变量for(var i=0;i<items.length;i++){if(items[i].checked){j++;}};//用j的值与items的长度做比较,如果j的值等于items的长度,则说明全选if(j==items.length){$(this).parent().parent().find(".sel").prop("checked",true)}else{$(this).parent().parent().find(".sel").prop("checked",false)}})
  })()
  </script>

时间: 2024-10-21 00:57:08

jqury简易实现checkbox反选与全选的相关文章

关于列表中checkbox选中,全选/反选设置

关于列表中checkbox选中,全选设置 1 <html> 2 <head> 3 <script type="text/javascript"> 4 //点击行时,checkbox处理方法 5 function doclick(id){ 6 var allche = document.getElementById("allid");//全选checkbox 7 var che = document.getElementsByNam

Jquery 利用单个复选款(checkbox)实现全选、反选

1 <script type="text/javascript"> 2 $(function(){ 3 //全选 4 $("#CheckedAll").click(function(){ 5 $('[name=items]:checkbox').attr("checked", this.checked ); 6 }); 7 $('[name=items]:checkbox').click(function(){ 8 //定义一个临时变

js小练习——页面实现重置、反选、全选三个按钮的功能

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>页面上有10个多选框,实现三个按钮(重置.反选.全选)功能</title></head><body><input type="checkbox"><input type="checkbox&

jQuery_review之jQuery实现多选框的反选、全选、全不选

有几个非常常见的知识点,需要重点关注一下.如何显示多选框呢?<input type="checkbox" name="name" value="value1"><input type="checkbox" name="name" value="value2">.这样就能表示两个多选框,他们具有同样的name值,在JSP中,传到后台的时候,可以使用request.g

2016/3/30 租房子 ①建立租房子的增、删、改php页面 ②多条件查询 ③全选时 各部分全选中 任意checkbox不选中 全选checkbox不选中

字符串的另一种写法:<<<AAAA; 后两个AA回车要求定格  不然报错 例子: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 </head> 7 <body> 8 <?php 9 $str = &

checkbox的单选全选,反选,计算价格,删除

activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" a

jq checkbox的操作——全选、反选

1.全选 $("#btn1").click(function(){ $("input[name='checkbox']").attr("checked","true"); }) 2.取消全选(全不选) $("#btn2").click(function(){ $("input[name='checkbox']").removeAttr("checked"); }) 3

简单的js反选,全选,全不选

<html> <head> <base href="<%=basePath%>"> <title>My JSP 'check.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" c

【jQuery】CheckBox使用attr全选无法正确显示

今天编写JS脚本时,遇到如下的问题. 下面是源代码: <script src="../Scripts/jquery-2.1.3.js"></script> <script type="text/javascript"> $(function(){ //全选 $("#CheckedAll").click(function(){ $('[name=items]:checkbox').attr('checked',