Wraz z wprowadzeniem metody prop, teraz muszę znać akceptowany sposób usuwania zaznaczenia pola wyboru. Czy to:
$('input').filter(':checkbox').removeAttr('checked');
lub
$('input').filter(':checkbox').prop('checked',false);
Wraz z wprowadzeniem metody prop, teraz muszę znać akceptowany sposób usuwania zaznaczenia pola wyboru. Czy to:
$('input').filter(':checkbox').removeAttr('checked');
lub
$('input').filter(':checkbox').prop('checked',false);
Odpowiedzi:
jQuery 3
Jak jQuery 3, removeAttrczy nie ustawić odpowiednią właściwość falsejuż:
Przed jQuery 3.0, stosując
.removeAttr()na atrybutu logicznego takich jakchecked,selectedlubreadonlyrównież ustawić odpowiadającą nazwie właściwośćfalse. To zachowanie było wymagane w starszych wersjach programu Internet Explorer, ale nie jest poprawne dla nowoczesnych przeglądarek, ponieważ atrybut reprezentuje wartość początkową, a właściwość reprezentuje wartość bieżącą (dynamiczną).Używanie
.removeAttr( "checked" )na elemencie DOM prawie zawsze jest błędem . Jedynym przypadkiem, w którym może się to przydać, jest to, że DOM ma zostać później serializowany z powrotem do łańcucha HTML. We wszystkich innych przypadkach.prop( "checked", false )należy użyć zamiast tego.
Stąd tylko .prop('checked',false)jest poprawny sposób korzystania z tej wersji.
Oryginalna odpowiedź (z 2011 r.):
W przypadku atrybutów, które mają podstawowe właściwości logiczne (z których checkedjest jedna), removeAttrautomatycznie ustawia podstawową właściwość na false. (Zauważ, że jest to jedna z "poprawek" kompatybilności wstecznej dodanych w jQuery 1.6.1).
Więc albo zadziała ... ale drugi przykład, który podałeś (używając prop), jest bardziej poprawny z tych dwóch. Jeśli Twoim celem jest odznaczenie pola wyboru, naprawdę chcesz wpłynąć na właściwość , a nie atrybut, i nie ma potrzeby, aby removeAttrto zrobić.
removeProp()] do usuwania właściwości natywnych, takich jak zaznaczone, wyłączone lub wybrane. Spowoduje to całkowite usunięcie właściwości i po usunięciu nie będzie można jej ponownie dodać do elementu. Użyj, .prop()aby ustawić te właściwości na fałsz zamiast." removePropjest naprawdę przeznaczony do użytku tylko z właściwościami niestandardowymi.
use checked: true, false właściwość pola wyboru.
jQuery:
if($('input[type=checkbox]').is(':checked')) {
$(this).prop('checked',true);
} else {
$(this).prop('checked',false);
}
Polecam używać obu funkcji, prop i attr, ponieważ miałem problemy z Chrome i rozwiązałem je za pomocą obu funkcji.
if ($(':checkbox').is(':checked')){
$(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
$(':checkbox').prop('checked', false).removeAttr('checked');
}
$("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Inną alternatywą, aby zrobić to samo, jest filtrowanie według atrybutu type = checkbox :
$('input[type="checkbox"]').removeAttr('checked');
lub
$('input[type="checkbox"]').prop('checked' , false);
Pamiętaj, że różnica między atrybutami a właściwościami może być ważna w określonych sytuacjach. Przed jQuery 1.6 metoda .attr () czasami brała pod uwagę wartości właściwości podczas pobierania niektórych atrybutów, co mogło powodować niespójne zachowanie. Począwszy od jQuery 1.6, metoda .prop () umożliwia jawne pobieranie wartości właściwości, podczas gdy .attr () pobiera atrybuty.