Wszyscy wiemy, jak utworzyć pole wyboru w HTML:
<input name="checkbox_name" id="checkbox_id" type="checkbox">
Czego nie wiem - jaka jest technicznie poprawna wartość zaznaczonego pola wyboru? Widziałem te wszystkie prace:
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked>
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="on">
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="yes">
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="checked">
<input name="checkbox_name" id="checkbox_id" type="checkbox" checked="true">
Czy odpowiedź, że to nie ma znaczenia? Widzę żadnych dowodów na odpowiedź oznaczone jako poprawne tutaj ze specyfikacją samego:
Pola wyboru (i przyciski opcji) to przełączniki on / off, które mogą być przełączane przez użytkownika. Przełącznik jest „włączony”, gdy ustawiony jest sprawdzony atrybut elementu sterującego. Po przesłaniu formularza tylko formanty „on” mogą się powieść. Kilka pól wyboru w formularzu może mieć tę samą nazwę kontrolną. Tak więc na przykład pola wyboru pozwalają użytkownikom wybrać kilka wartości dla tej samej właściwości. Element INPUT służy do utworzenia kontrolki pola wyboru.
Co powiedziałby spec spec od poprawnej odpowiedzi? Proszę podać odpowiedzi oparte na dowodach.
źródło
Odpowiedzi:
Ściśle mówiąc, powinieneś umieścić coś, co ma sens - zgodnie ze specyfikacją tutaj najbardziej poprawna wersja to:
HTML, można również użyć składni pustego atrybutu ,
checked=""
lub nawet po prostuchecked
(za ściślejszym XHTML, to nie jest obsługiwany ).Jednak w rzeczywistości większość przeglądarek obsługuje niemal dowolną wartość między cytatami. Zostaną sprawdzone wszystkie następujące elementy:
I tylko następujące elementy zostaną odznaczone:
Zobacz także podobne pytanie na
disabled="disabled"
.źródło
checked (checked)
co oznacza: „Sprawdzony atrybut może mieć wartość„ zaznaczone ”). Tylkochecked
dopuszczalna wartość, żadna z pozostałych nie jest. Atrybuty logiczne pozwalają pominąć wszystko oprócz wartości, więcchecked
jest to dopuszczalne jak równieżchecked="checked"
.checked
,checked=""
ichecked="checked"
są OK. w3.org/TR/html-markup/input.checkbox.html"checked"
bez nazwy atrybutu i sprawić, by działała poprawnie.checked
, należy użyć autouzupełniania = „OFF” , aby zachować swoją przeglądarkę automatyczne sprawdzenie go.Specyfikacja HTML5 :
http://www.w3.org/TR/html5/forms.html#attr-input-checked :
http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :
Wniosek :
Następujące są prawidłowe, równoważne i prawdziwe :
Następujące elementy są nieprawidłowe :
Brak atrybutu jest jedyną prawidłową składnią fałszu :
Rekomendacje
Jeśli zależy ci na pisaniu prawidłowego XHTML, użyj
checked="checked"
, ponieważ<input checked>
jest niepoprawny XHTML (ale poprawny HTML), a inne alternatywy są mniej czytelne. W przeciwnym razie po prostu użyj,<input checked>
ponieważ jest krótszy.źródło
Te są równie ważne. I w JavaScript:
źródło
input.setAttribute("checked")
TypeError: Nie można wykonać polecenia „setAttribute” w „elemencie”: wymagane 2 argumenty, ale obecny tylko 1chcesz tego myślę:
checked='checked'
źródło
zaznaczone = „zaznaczone”
są równoważne;
zgodnie ze specyfikacją pole wyboru „---- ⓘ zaznaczone =„ zaznaczone ”lub„ ”(pusty ciąg) lub puste Określa, że element reprezentuje wybraną kontrolkę .---
źródło
To dość szalone miasto, w którym jedynym sposobem na sprawdzenie fałszu jest pominięcie jakichkolwiek wartości. Z Angular 1.x możesz to zrobić:
co jest o wiele bardziej rozsądne, jeśli chcesz je odznaczyć.
źródło
Myślę, że to może pomóc:
Najpierw przeczytaj wszystkie specyfikacje Microsoft i W3.org.
Zobaczysz, że ustawienie rzeczywistego elementu pola wyboru należy wykonać na ELEMENT PROPERTY, a nie na interfejsie użytkownika lub atrybucie.
$('mycheckbox')[0].checked
Po drugie, musisz mieć świadomość, że zaznaczony atrybut ZWRACA ciąg „prawda”, „fałsz”
Dlaczego to takie ważne? Ponieważ musisz użyć poprawnego typu. Ciąg, nie boolean. Jest to również ważne podczas analizowania pola wyboru.
$('mycheckbox')[0].checked = "true"
if($('mycheckbox')[0].checked === "true"){ //do something }
Musisz także zdać sobie sprawę, że „zaznaczony” ATRYBUT służy do początkowego ustawienia wartości pola wyboru. Nie robi to wiele, gdy element jest renderowany do DOM. Wyobraź to sobie, gdy strona ładuje się i jest wstępnie analizowana.
Pójdę z preferencjami IE na ten:
<input type="checkbox" checked="checked"/>
Wreszcie, głównym aspektem pomyłki dla pola wyboru jest to, że element interfejsu użytkownika pola wyboru nie jest taki sam, jak wartość właściwości elementu. Nie korelują bezpośrednio. Jeśli pracujesz w .net, odkryjesz, że użytkownik „zaznaczający” pole wyboru nigdy nie odzwierciedla rzeczywistej wartości bool przekazanej do kontrolera. Aby ustawić interfejs, używam zarówno
$('mycheckbox').val(true);
i$('mycheckbox').attr('checked', 'checked');
Krótko mówiąc, dla zaznaczonego pola wyboru potrzebujesz:
Początkowy DOM:
<input type="checkbox" checked="checked">
Właściwość elementu:
$('mycheckbox')[0].checked = "true";
Interfejs użytkownika:
$('mycheckbox').val(true);
i$('mycheckbox').attr('checked', 'checked');
źródło
Cóż, aby go użyć, nie sądzę, że ma to znaczenie (podobnie jak wyłączone i tylko do odczytu), osobiście używam zaznaczonego = "zaznaczonego", ale jeśli próbujesz manipulować nimi za pomocą JavaScript, używasz true / false
źródło
disabled
ireadonly
zbyt), nawet jeśli ożywienie błąd przeglądarki jest całkiem dobry. Jeśli chcesz manipulować atrybutem za pomocą JS, powinieneś nadal używaćchecked
lubremoveAttribute('checked')
.checked
Nieruchomość bierzetrue
lubfalse
.