复选框全选全不选的例子---坑在 选中却不打钩,但检查元素是checked="checked"

情况是这样的:我的html结构:


<form method="post" action="">
   你爱好的运动是?<input type="checkbox" id="CheckedAll" />全选/全不选<br/>
    <input type="checkbox" name="items" value="足球"/>足球
    <input type="checkbox" name="items" value="篮球"/>篮球
    <input type="checkbox" name="items" value="羽毛球"/>羽毛球
    <input type="checkbox" name="items" value="乒乓球"/>乒乓球<br/>
    <input type="button" id="send" value="提 交"/> 
</form>

我的用jquery控制全选/全不选

<script type="text/javascript">
$(function(){
     //全选
      $('#CheckedAll').click(function(){
        $('[name=items]').attr('checked',this.checked);//this 代表谁
      });
      $('[name=items]').click(function(){
        var $tmp = $('[name=items]');//不加:checked为啥不行呢 
        $('#CheckedAll').attr('checked',$tmp.length == $tmp.filter(':checked').length)
      });
      $('#send').click(function(){
        var str="你选中的是:\r\n";
        $('[name=items]:checked').each(function(){
            str+=$(this).val()+"\r\n";
        });
        alert(str);
      })


});
  </script>

结果:当我点击全选后,界面上并不显示画钩,但浏览器中检查元素,那些元素属性已经有checked=checked。
原因:
jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就导致了结果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值。
例如, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 和 defaultSelected 应使用.prop()方法进行取值或赋值。 在jQuery1.6之前,这些属性使用.attr()方法取得,但是这并不是元素的attr属性。他们没有相应的属性(attributes),只有特性(property)。
例如,考虑一个DOM元素的HTML标记中定义的<input type="checkbox" checked="checked" /> ,并假设它是一个JavaScript变量命名的elem :

elem.checked true (Boolean) 将改变复选框的状态 
$(elem).prop("checked") true (Boolean) 将改变复选框的状态 
elem.getAttribute("checked") "checked" (String) 不会改变的复选框的初始状态; 
$(elem).attr("checked") (1.6) "checked" (String) 不会改变的复选框的初始状态; 
$(elem).attr("checked") (1.6.1+) "checked" (String) 将改变复选框的状态 
$(elem).attr("checked") (pre-1.6) true (Boolean) 将改变复选框的状态 

根据W3C的表单规范 ,在checked属性是一个布尔属性,这意味着只要该 attribute 存在,即使它没有值,或是一个空字符串,该属性对应的 property 就是 true。以下推荐的是兼容浏览器方式,判断 checkbox 元素的 checked 属性是否为”真” 的方法:

if ( elem.checked ) 
if ( $(elem).prop("checked") ) 
if ( $(elem).is(":checked") ) 

如果你使用jQuery 1.6 ,代码if ( $(elem).attr(“checked”) ),将获得一个属性(attribute) ,它不改变该复选框被选中和选中。它只是用来存储默认或选中属性的初始值。为了保持向后兼容,.attr() 方法从 jQuery 1.6.1+ 开始除了返回属性值外,还会更新 property 属性,因此 boolean attribute(布尔属性)不需要通过 .prop() 来改变其值。推荐使用上述方法之一,来取得 checked 的值。
解决:我之前用的是jquery-2.1.1.min.js,后来我换了低版本的jquery.min.js就好使了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值