2014-07-16 41 views
8

我使用jQuery 1.11.1,這是我的代碼:jQuery的設置所有複選框選中

$("#rowchkall").change(function(){ 
    if($(this).is(':checked')){ 
     $("input:checkbox[class=rowchk]").each(function() { 
      alert("set checked"); 
      $(this).attr('checked', "checked"); 
     }); 
    }else{ 
     $("input:checkbox[class=rowchk]").each(function() { 
      $(this).attr('checked', false); 
     }); 
    } 
}); 

當我第一次點擊#rowchkall,所有的複選框設置爲選中狀態。當我再次單擊它時,所有複選框都未選中。

當我再次點擊它時,警告框仍然出現,但沒有任何複選框將被選中。爲什麼它只是第一次工作?我該如何解決它?

謝謝。

回答

17

使用.prop(),而不是.attr()

$(this).prop('checked', true); //true to check else false uncheck 

您的代碼可以簡化爲

$("#rowchkall").change(function() { 
    $("input:checkbox.rowchk").prop('checked',this.checked); 
}); 

一個良好的閱讀.prop() vs .attr()

+1

+1鏈接到文檔並顯示一個例子,說明第二個參數是布爾值 – jmort253

+0

非常感謝您的回答。在你的例子中,爲什麼不直接將它設置爲'true'或'false'?使用'this.checked'有什麼好處? – user1995781

+0

我認爲這可以修改爲$(「。rowchk」),因爲'checked'屬性僅用於複選框。 –

4

嘗試使用.prop(),而不是.attr()

$("#rowchkall").change(function(){ 
    $("input:checkbox[class=rowchk]").prop('checked', this.checked); 
}); 

而且您不需要通過iterate來更改所有元素的屬性。

1
$("#rowchkall").change(function(){ 
    if($(this).is(':checked')){ 
     $("input.rowchk[type=checkbox]").each(function() { 
      alert("set checked"); 
      $(this).attr('checked',true); 
     }); 
    }else{ 
     $("input.rowchk[type=checkbox]").each(function() { 
      $(this).attr('checked', false); 
     }); 
    } 
});