Jak jQuery 3, removeAttrczy nie ustawić odpowiednią właściwość falsejuż:
Przed jQuery 3.0, stosując .removeAttr()na atrybutu logicznego takich jak checked, selectedlub readonlyró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ć.
@tandu: Użytkownik może , ale nie należy. Z dokumentów: „ Uwaga: nie używaj [ 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.
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.
Pytanie brzmiało: „Który z nich jest bardziej poprawny”, a nie „Czy są inne sposoby na zrobienie tego?”. Wygląda na to, że nie próbowałeś odpowiedzieć na pytanie
Odpowiedzi:
jQuery 3
Jak jQuery 3,
removeAttr
czy nie ustawić odpowiednią właściwośćfalse
już:Changelog
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
checked
jest jedna),removeAttr
automatycznie ustawia podstawową właściwość nafalse
. (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, abyremoveAttr
to zrobić.źródło
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."removeProp
jest naprawdę przeznaczony do użytku tylko z właściwościami niestandardowymi.use
checked
: true, false właściwość pola wyboru.jQuery:
źródło
Polecam używać obu funkcji, prop i attr, ponieważ miałem problemy z Chrome i rozwiązałem je za pomocą obu funkcji.
źródło
$("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 :
lub
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.
Dowiedz się więcej ...
źródło