为什么我检查所有功能都有效,但取消选中所有功能却没有

时间:2014-04-10 13:51:22

标签: javascript php jquery

伙计们我有一个功能,当它使用时,它应该检查所有框并取消选中它们。这是最好的

     $('#checkAllId').change(function(){

    if($(this).attr('checked')){
     //uncheck all the checkboxes   
     $("input[type='checkbox']").each( 
       function() { 
          $(this).attr('checked',false);
       } 
     );
   }else{
      //check all the checkboxes  
      $("input[type='checkbox']").each( 
       function() { 
          $(this).attr('checked',true);
       } 
     ); 
   }
});  

然而我改编了这个功能,所以我可以用特定的类来定位特定的复选框。这是改编版

    $('#checkAllId').change(function(){

    if($(this).attr('checked')){
     //uncheck all the checkboxes   
     $("input.mainobservations:checkbox").each( 
       function() { 
          $(this).attr('checked',false);
       } 
     );
   }else{
      //check all the checkboxes  
      $("input.mainobservations:checkbox").each( 
       function() { 
          $(this).attr('checked',true);
       } 
     ); 
   }
});  

这可以检查所有方框,但不能取消选中所有方框。这是为什么?

3 个答案:

答案 0 :(得分:0)

您需要使用.prop设置复选框以选中/取消选中而不是.attr

$(this).prop('checked',true);

答案 1 :(得分:0)

使用.prop()。试试这个:

$(this).prop('checked',true);

查看.prop() vs .attr()

答案 2 :(得分:0)

假设您使用的是可以访问prop()的jQuery版本,您应该使用该版本而不是attr(),我建议使用以下方法:

$('#checkAllId').change(function(){
    $('input.mainobservations[type="checkbox"]').prop('checked', this.checked);
});

Rudimentary JS Fiddle demo

关于为什么,值得参考jQuery API for the prop() method

  

尽管如此,要记住关于checked属性的最重要的概念是它与checked属性不对应。该属性实际上对应于defaultChecked属性,应仅用于设置复选框的初始值。 checked属性值不会随复选框的状态而改变,而checked属性则会改变。