2014-07-16 28 views
8

używam jQuery 1.11.1 i jest to mój kod:jquery ustawić wszystkie zaznaczone pole wyboru

$("#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); 
     }); 
    } 
}); 

Kiedy po raz pierwszy kliknij #rowchkall, cała opcja jest ustawiona na sprawdzony. Gdy kliknę ponownie, wszystkie pola wyboru są odznaczone.

Po ponownym kliknięciu pola alertu nadal będą wyświetlane, ale żadne z pól wyboru nie będzie zaznaczone. Dlaczego działa tylko po raz pierwszy? Jak mogę to naprawić?

Dziękuję.

Odpowiedz

17

Zastosowanie .prop() zamiast .attr()

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

Twój kod można uprościć

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

warto przeczytać .prop() vs .attr()

+1

+1 za powiązanie z dokumentami i pokazanie przykładu, że drugi argument wniosku jest boolean – jmort253

+0

Wielkie dzięki za odpowiedź. W twoim przykładzie, dlaczego nie po prostu ustawić go "true" lub "false"? Jaka jest korzyść z używania 'this.checked'? – user1995781

+0

Myślę, że można to zmienić na '$ (". Rowchk ")', ponieważ atrybut "checked" jest tylko dla pól wyboru .. –

4

spróbuje użyć .prop() zamiast .attr()

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

Nie musisz też iterate nad wszystkimi elementami, aby zmienić jego właściwość.

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); 
     }); 
    } 
}); 
Powiązane problemy