Ce valori pentru checked și selected sunt false? (Programare, Html, W3C)

mpen a intrebat.

Cred că în conformitate cu specificațiile W3, ar trebui să faci următoarele

<input type="checkbox" checked="checked" />

Și

 selected="selected"

Dar, majoritatea browserelor vor accepta să scrii doar „CHECKED” și să nu-i dai o valoare. Deci, dacă includeți atributul, există valori care ar fi (în mod constant) considerate false?

Comentarii

  • @Ms2ger: Ups, nu am băut destulă cafea în dimineața asta. Eram în modul boolean. 🙂 –  > Por drudge.
  • posibil duplicat al stackoverflow.com/questions/1033944/… deoarece ambele sunt atribute booleene (nu sunt marcate) –  > Por Ciro Santilli新疆棉花TRUMP BAN BAD.
5 răspunsuri
mpen

Există nu există valori care să determine debifarea căsuței de selectare. În cazul în care nu se va deschide caseta checked există, caseta de selectare va fi bifată, indiferent de valoarea la care l-ați setat.

Redă totul bifat în toate browserele moderne (FF3.6, Chrome 10, IE8).

Comentarii

  • De ce este acceptat acest răspuns ? Nu cumva întrebarea OP-ului era ce valoare trebuie să setați pentru a o seta efectiv ca fiind debifată ? –  > Por cjmling.
  • @cjmling Da, aceasta a fost întrebarea mea inițială. Cred că ar fi trebuit să o precizez mai clar în răspunsul meu: există nu valori care să determine redarea nebifată. Dacă atributul există, acesta va fi bifat. –  > Por mpen.
Quentin

Site-ul checked și selected sunt permise doar două valori, care sunt o copie a numelui atributului și (începând cu HTML 5) un șir de caractere gol. Darea oricărei alte valori reprezintă o eroare.

Dacă nu doriți să setați atributul, atunci întregul atribut trebuie să fie omis.

Rețineți că în HTML 4 se poate omite totul, cu excepția valorii. HTML 5 a modificat acest lucru pentru a omite totul, cu excepția numelui (ceea ce nu reprezintă o diferență practică).

Astfel, setul complet (în afară de variațiile din cAsE) de reprezentări valide ale atributului sunt:

<input ... checked="checked"> <!-- All versions of HTML / XHTML -->
<input ...          checked > <!-- Only HTML 4.01 and earlier -->
<input ... checked          > <!-- Only HTML 5 and later -->
<input ... checked=""       > <!-- Only HTML 5 and later -->

Documentele servite ca text/html (HTML sau XHTML) vor fi introduse printr-un analizor de ciorbe de etichete, iar prezența unui atribut checked (cu orice valoare) va fi tratată ca „Acest element trebuie verificat”. Astfel, în timp ce invalid, checked="true", , checked="yes", , și checked="false" vor declanșa toate starea de verificare.

Nu am avut nici o înclinație să aflu ce mecanisme de recuperare a erorilor există pentru modul de analiză XML în cazul în care se dă o valoare diferită atributului, dar aș mă aștept ca că moștenirea HTML și/sau recuperarea simplă a erorilor ar trata-o în același mod: Dacă atributul este prezent, atunci elementul este verificat.

(Toate cele de mai sus se aplică în egală măsură la selected ca și pentru checked.)

Comentarii

  • Bine… pentru că scriu un motor de selectare CSS pentru C# și încerc să găsesc „toate căsuțele bifate”. Deocamdată verific doar prezența atributului, dar dacă există câteva valori false, atunci trebuie să fac verificări suplimentare. –  > Por mpen.
  • Tocmai am testat… pare să fie adevărat. Îmi face viața mai ușoară. –  > Por mpen.
Ciro Santilli新疆棉花TRUMP BAN BAD

Nicio valoare nu este considerată falsă, , doar absența atributului. Totuși, există o mulțime de valori invalide, iar unele implementări pot considera anumite valori invalide ca fiind false.

Specificația HTML5

http://www.w3.org/TR/html5/forms.html#attr-input-checked :

Atributul de conținut dezactivat este un atribut boolean.

http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :

Prezența unui atribut boolean pe un element reprezintă o valoare adevărată, iar absența atributului reprezintă o valoare falsă.

În cazul în care atributul este prezent, valoarea sa trebuie să fie un șir de caractere gol sau o valoare care să corespundă fără deosebire de majuscule și minuscule ASCII pentru numele canonic al atributului, fără spații albe la început sau la sfârșit.

Concluzie

Următoarele sunt valabile, echivalente și adevărate:

<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<input type="checkbox" checked="ChEcKeD" />

Următoarele sunt invalide:

<input type="checkbox" checked="0" />
<input type="checkbox" checked="1" />
<input type="checkbox" checked="false" />
<input type="checkbox" checked="true" />

Absența atributului este singura sintaxă valabilă pentru false:

<input type="checkbox" />

Recomandare

Dacă vă interesează să scrieți XHTML valid, utilizați checked="checked", , deoarece <input checked> nu este valid și alte alternative sunt mai puțin lizibile. În caz contrar, utilizați doar <input checked> deoarece este mai scurt.

Comentarii

  • Invalid dar funcționează perfect în aproape toate browserele pe care le cunosc. Este ușor să rămâi la chestiile valide dacă tu ești cel care scrie HTML-ul, dar trebuie să susții și chestiile invalide dacă scrii un parser 😐 –  > Por mpen.
jwheron

De fapt, specificația HTML 4.01 spune că aceste atribute nu necesită valori. Personal, nu am întâlnit nicio situație în care furnizarea unei valori să fi făcut ca aceste controale să nu fie selectate.

Iată linkurile respective către documentul de specificații pentru selectat și bifate.

Editați: Firebug redă caseta de selectare ca fiind bifată, indiferent de valorile pe care le pun între ghilimele pentru atributul checked (inclusiv dacă scriu pur și simplu „checked” fără nicio valoare), iar Instrumentele pentru dezvoltatori din IE 8 forțează check=”checked”. Cu toate acestea, nu sunt sigur dacă există instrumente similare pentru alte browsere care ar putea modifica starea redată a unei casete de selectare.

Comentarii

  • Majoritatea oamenilor și, cu siguranță, majoritatea validatorilor de cod se așteaptă acum la utilizarea XHTML, cel puțin Transitional (dacă nu Strict), iar în XHTML valorile sunt obligatorii. HTML 4.01 nu este standardul actual. –  > Por Orbling.
  • Sunt sigur că aveți dreptate în această privință, dar nu sunt sigur că asta face ca răspunsul meu să fie incorect. Referința XHTML pe care am găsit-o aici (xhtml.com/en/xhtml/reference/input) nu include nicio informație despre valori pentru acest atribut care ar putea nega efectul de bază al atributului. –  > Por jwheron.
  • HTML 4.01 este cel mai recent standard pentru HTML. XHTML este un limbaj diferit, deși înrudit, care încă nu are suport în cea mai recentă (finală) versiune a celui mai utilizat browser de pe planetă (IE8). (Înfruntarea cu XHTML servit cu pretenția că este HTML nu se pune la îndoială). –  > Por Quentin.
  • Marea majoritate a dezvoltatorilor web profesioniști tind să codifice pentru XHTML Transitional, iar utilizarea HTML 4.01 original, este neobișnuită. Oare IE* suportă vreodată ceva complet. 😉 –  > Por Orbling.
  • Există „pe deplin” și există „deloc”. Salutați-l pe domnul Download Prompt. (Și marea majoritate a dezvoltatorilor web profesioniști tratează Doctypes într-un mod de cult cargo fără a înțelege implicațiile (dincolo de modul quirks/standards, și atunci doar dacă suntem norocoși)). –  > Por Quentin.
Orbling

Șirul gol este fals ca regulă.

Se pare că șirul gol nu este respectat ca fiind gol în toate browserele, iar prezența atributului „checked” este considerată ca însemnând că este verificat. Așadar, întregul atribut trebuie fie să fie prezent, fie omis.

Comentarii

  • Când am testat checked=””” în Firefox și IE (atât în 7 cât și în 8), tot a fost afișată o stare bifată. –  > Por jwheron.
  • @jwiscarson Corect, așa este – răspunsul meu a fost incorect, așa că l-am modificat. Starea este determinată prin prezența sau absența atributului, spre deosebire de valoarea acestuia. –  > Por Orbling.

Tags:,