jquery中elem.attr()无法正确判断checkbox是否选中

2016-02-22    编辑:kp12345     点击(
有朋友问我在做表单验证时碰到elem.attr()无法正确判断checkbox是否选中问题要如何处理,下面小编来为各位介绍一下吧。

关于Jquery $(“#checked”).attr(“checked”) 无效的问题

使用情景: 使用 Jquery 实时验证 input checkbox 是否被选中?
$("#checkedElem").attr("checked") 这是一个非常简单的 Jquery 语句,

意思很明显: 得到 id 为 checkedElem 的元素的 checked 属性值

但是出乎意料的是,不管 checkbox 元素是否被选中,返回的 checked 属性值总是 undefined。

Shen me gui?

这其实是一个元素属性的理解问题:

元素的属性有两种形式 Properties 和 Attributes

Attributes 所指的是在html中直观的表现出来的属性,如: <input type="checkbox" /> 就是指 type 属性。

元素的 Attributes 属性只会保存浏览器在渲染 html 时所赋的初始值.
Properties 则是该元素所有的属性值(包括在 html 中直接写出来和没有写出来的属性值),并且 Properties 会实时更新赋值。如: 当点击一个 checkbox 元素或者选中一个 select 元素的某个 option 时,即改变了该元素的属性值时,Properties 就会更新会当前值。

所以,如果我们并没有在 html 初始化 checked 属性的值的话,$("#checkedElem").attr("checked") 就只能得到 undefined.

而如果我们在 html 初始化 checked 属性值为 checked 的话,$("#checkedElem").attr("checked") 也会一直返回 checked.


例子里面包括了一下几个功能。

   <input type="button" id="btn1" value="全选">
   <input type="button" id="btn2" value="取消全选">
   <input type="button" id="btn3" value="选中所有奇数">
   <input type="button" id="btn4" value="反选">
   <input type="button" id="btn5" value="获得选中的所有值">

代码

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <SCRIPT LANGUAGE="JavaScript" src="/jquery.js"></script>
  <SCRIPT LANGUAGE="JavaScript">
  <!--
   $("document").ready(function(){
   
    $("#btn1").click(function(){
    
    $("[name='checkbox']").attr("checked",'true');//全选
 
    })
       $("#btn2").click(function(){
    
    $("[name='checkbox']").removeAttr("checked");//取消全选
 
    })
    $("#btn3").click(function(){
    
    $("[name='checkbox']:even").attr("checked",'true');//选中所有奇数
 
    })
    $("#btn4").click(function(){
    
    $("[name='checkbox']").each(function(){
    
  
     if($(this).attr("checked"))
   {
    $(this).removeAttr("checked");
   
   }
   else
   {
    $(this).attr("checked",'true');
   
   }
  
    })
 
    })
     $("#btn5").click(function(){
    var str="";
    $("[name='checkbox'][checked]").each(function(){
     str+=$(this).val()+""r"n";
   //alert($(this).val());
    })
   alert(str);
    })
   })
  //-->
  </SCRIPT>
 
 </HEAD>

 <BODY>
 <form name="form1" method="post" action="">
   <input type="button" id="btn1" value="全选">
   <input type="button" id="btn2" value="取消全选">
   <input type="button" id="btn3" value="选中所有奇数">
   <input type="button" id="btn4" value="反选">
   <input type="button" id="btn5" value="获得选中的所有值">
   <br>
   <input type="checkbox" name="checkbox" value="checkbox1">
   checkbox1
   <input type="checkbox" name="checkbox" value="checkbox2">
   checkbox2
   <input type="checkbox" name="checkbox" value="checkbox3">
   checkbox3
   <input type="checkbox" name="checkbox" value="checkbox4">
   checkbox4
   <input type="checkbox" name="checkbox" value="checkbox5">
   checkbox5
   <input type="checkbox" name="checkbox" value="checkbox6">
   checkbox6
   <input type="checkbox" name="checkbox" value="checkbox7">
   checkbox7
   <input type="checkbox" name="checkbox" value="checkbox8">
 checkbox8
 </form>


总结,$("#checkedElem").attr("checked") 应当修改 $("#checkedElem").prop("checked"), 即可实现相应效果。