首页 > 语言 > JavaScript > 正文

浅谈jQuery中的checkbox问题

2024-05-06 14:53:20
字体:
来源:转载
供稿:网友

一开始的代码:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>复选框</title>  <script src="https://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>  <script type="text/javascript">  $(function() {    $("#all").click(function () {      if (this.checked) {        $("#list :checkbox").each(function () {          $(this).attr("checked", true);  //选择器要有空格隔开        })      } else {        $("#list :checkbox").each(function () {          $(this).attr("checked", false);        })      }    });  })</script></head><body><ul id="list">  <li><label><input type="checkbox" value="1">广东省 </label></li>  <li><label><input type="checkbox" value="2">广西省 </label></li>  <li><label><input type="checkbox" value="3">河南省 </label></li>  <li><label><input type="checkbox" value="4">福建省 </label></li>  <li><label><input type="checkbox" value="5">湖南省 </label></li>  <li><label><input type="checkbox" value="6">江西省 </label></li></ul><input type="checkbox" id="all"><input type="button" value="全选" class="btn" id="selectAll"><input type="button" value="全不选" class="btn" id="unSelect"><input type="button" value="反选" class="btn" id="reverse"><input type="button" value="获得选中的所有值" class="btn" id="getValue"></body></html>

当使用带有jQuery的方法attr()时,会有相应的问题存在,比如当你在点击id=all的复选框前去点击id=list下的复选框,这时当你再次点击id=all的复选框时就会出现之前点击的复选框没有变化,但是查看元素时发现该复选框的checked值会发生相应的变化。我查了一下资料,问题出在如下:

原来是jQuery版本问题。因为这里用的是attr(),而jQuery的版本用的是3.1.0的,这就存在一个兼容性问题。

$("XXX").attr("attrName");而jQuery的版本用的是2.1.1,这就是存在一个兼容性和稳定性问题。

jQuery API明确说明,1.6+的jQuery要用prop,尤其是checkBox的checked的属性的判断,

即使用代码如下:

$(function() {    $("#all").click(function () {      if (this.checked) {        $("#list :checkbox").each(function () {          $(this).prop("checked", true);  //选择器要有空格隔开        })      } else {        $("#list :checkbox").each(function () {          $(this).prop("checked", false);        })      }    });

给出使用jQuery事先的全选和全不选:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>复选框</title>  <script src="https://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>  <script type="text/javascript">  $(function() {    $("#all").click(function () {      if (this.checked) {        $("#list :checkbox").each(function () {          $(this).prop("checked", true);  //选择器要有空格隔开        })      } else {        $("#list :checkbox").each(function () {          $(this).prop("checked", false);        })      }    });    //第二种//    $("#all").click(function(){//      if(this.checked){//        $("#list :checkbox").prop("checked", true);//      }else{//        $("#list :checkbox").prop("checked", false);//      }//    });    //全选    $("#selectAll").click(function () {      $("#list :checkbox,#all").prop("checked", true);    });    //全不选    $("#unSelect").click(function () {      $("#list :checkbox,#all").prop("checked", false);    });    //反选    $("#reverse").click(function () {      $("#list :checkbox").each(function () {//        $(this).prop("checked", !$(this).prop("checked"));        this.checked=!this.checked;      });      if($('#list :checkbox:checked').length==$("#list :checkbox").length){        $("#all").prop("checked",true);      }      else{        $("#all").prop("checked",false);      }    });    //获取选中的值    $("#getValue").click(function(){      var valArr = new Array();      $("#list :checkbox:checked").each(function(i){   //判断被选中的        valArr[i] = $(this).val();      })      var vals = valArr.join(',');//转换为逗号隔开的字符串      alert(vals);    });  })  </script></head><body><ul id="list">  <li><label><input type="checkbox" value="1.广东省">广东省 </label></li>  <li><label><input type="checkbox" value="2.广西省">广西省 </label></li>  <li><label><input type="checkbox" value="3.河南省">河南省 </label></li>  <li><label><input type="checkbox" value="4.福建省">福建省 </label></li>  <li><label><input type="checkbox" value="5.湖南省">湖南省 </label></li>  <li><label><input type="checkbox" value="6.江西省">江西省 </label></li></ul><input type="checkbox" id="all"><input type="button" value="全选" class="btn" id="selectAll"><input type="button" value="全不选" class="btn" id="unSelect"><input type="button" value="反选" class="btn" id="reverse"><input type="button" value="获得选中的所有值" class="btn" id="getValue"></body></html>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选