HTML onay kutusunun işaretli bir özelliği için uygun değer nedir?


436

HTML'de bir onay kutusu girdisinin nasıl oluşturulacağını hepimiz biliyoruz:

<input name="checkbox_name" id="checkbox_id" type="checkbox">

Ne bilmiyorum - işaretli bir onay kutusunun teknik olarak doğru değeri nedir? Bunların hepsinin işe yaradığını gördüm:

<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">

Cevabı önemli değil mi? Doğru olarak işaretlenmiş hayır cevabını kanıt göremedim burada dan spec kendisi:

Onay kutuları (ve radyo düğmeleri), kullanıcı tarafından değiştirilebilen açma / kapama düğmeleridir. Kontrol elemanının kontrol edilen özelliği ayarlandığında bir anahtar "açıktır". Bir form gönderildiğinde, yalnızca "açık" onay kutusu denetimleri başarılı olabilir. Formdaki birkaç onay kutusu aynı kontrol adını paylaşabilir. Böylece, örneğin, onay kutuları kullanıcıların aynı özellik için birkaç değer seçmesine izin verir. INPUT öğesi bir onay kutusu denetimi oluşturmak için kullanılır.

Spesifikasyon yazarı doğru cevap ne der? Lütfen kanıta dayalı cevaplar sağlayın.


Soru özetinizde işaretli özellik için değerden bahsediyorsunuz, ancak soru açıklamasında işaretli bir onay kutusunun doğru değerini tartışıyorsunuz. Onay kutusunun "değeri", işaretli özellikten farklıdır, soru açıklamanıza, özelliğin değeri anlamına da geldiğini düşünüyorum, belki de soru açıklamasını ayarlamak istersiniz. Bir onay kutusunun "değeri" için stackoverflow.com/questions/14323899/…
melutovich

Yanıtlar:


451

Kesin konuşmak gerekirse, sen mantıklıdır şeyler koymalıyız - spec göre burada , en doğru sürümü:

<input name=name id=id type=checkbox checked=checked>

HTML için, ayrıca kullanabilirsiniz boş nitelik sözdizimi , checked=""hatta sadece checked(sıkı XHTML için, bu edilmektedir desteklenmez ).

Bununla birlikte, etkili bir şekilde, çoğu tarayıcı tırnaklar arasında hemen hemen her değeri destekleyecektir. Aşağıdakilerin tümü kontrol edilecektir:

<input name=name id=id type=checkbox checked>
<input name=name id=id type=checkbox checked="">
<input name=name id=id type=checkbox checked="yes">
<input name=name id=id type=checkbox checked="blue">
<input name=name id=id type=checkbox checked="false">

Ve sadece aşağıdakiler işaretlenmeyecektir:

<input name=name id=id type=checkbox>

Ayrıca bu benzer soruya bakın disabled="disabled".


39
Bu yanlış. Eğer bakarsanız spec , diyor: checked (checked)işaretli özellik değerini) 'işaretli' olabilir hangi vasıta" Yalnızca. checkedKabul edilebilir bir değer diğerleri hiçbiri olmaları. Boole nitelikler omit her şeyi size izin haricinde değer o kadar checkedkabul edilebilir yanı sıra checked="checked".
Quentin

14
Bir HTML5 odaklı W3 sayfa söylüyor checked, checked=""ve checked="checked"ok vardır. w3.org/TR/html-markup/input.checkbox.html
Ryan Williams

1
@ Özür dilerim, bu cümle benim için anlamlı değil. Özelliğin adı dışındaki her şeyi atlayabileceğiniz anlamına mı geliyorsunuz? Çünkü değer dışında her şeyi atlayabilirseniz "checked", özellik adı olmadan yazabilir ve düzgün çalışmasını sağlayabilirsiniz.
Hannele

4
@Quentin tl, dr: Anlambilimseldir, ancak boş öznitelik sözdizimi , değeri değil, yalnızca özniteliğin adını belirtir .
Hannele

1
Onay kutusu varsa kalır işaretli (sayfayı yeniden iken) ihmal rağmen boole / boş özelliğini checked kullanın "kapalı" otomatik tamamlama = otomatik olarak denetlemesini tarayıcınızı tutmak için.
sap

58

HTML5 spesifikasyonu :

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

Devre dışı bırakılan içerik özelliği, bir boole özelliğidir.

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

Bir öğe üzerinde bir boolean özelliğinin varlığı, gerçek değeri, özelliğin olmaması ise yanlış değeri temsil eder.

Özellik mevcutsa, değerinin boş dize veya özelliğin kanonik adı için ASCII büyük / küçük harfe duyarlı olmayan bir değer olması gerekir.

Sonuç :

Aşağıdakiler geçerli, eşdeğer ve doğrudur :

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

Aşağıdakiler geçersiz :

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

Özniteliğin olmaması, false için geçerli tek sözdizimidir :

<input />

Öneri

Geçerli XHTML, kullanımını yazma önem veriyorsanız checked="checked"bu yana, <input checked>geçersiz XHTML (ama geçerli HTML) ve diğer alternatifler daha az okunabilir olduğunu. Aksi <input checked>takdirde , sadece daha kısa olduğu için kullanın .


2
2. düzenlemeye geri dönmeye karar verdim ve spesifikasyonu önce sakladım. Örnekler ilk olarak genel olarak gitmek için bir yol olsa da, bunun bu cevabın sadece örnekler veren mevcut tepkilerle ilgili ayırt edici yönü olduğunu hissediyorum. Yine de öneri için teşekkürler :-)
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

2
Bence bu doğru cevap, yokluğun yanlış demek olduğunu vurguluyor. = "True" çalışırken, = "false" ifadesinin istendiği gibi çalışacağını ve çalışmadığını gösterir.
aamarks

35
<input ... checked />
<input ... checked="checked" />

Bunlar eşit derecede geçerlidir. Ve JavaScript'te:

input.checked = true;
input.setAttribute("checked");
input.setAttribute("checked","checked");

4
setAttribute, DOM işaretlemesini değiştirir, özellik atamasına gerek yoktur.
user2864740

input.setAttribute("checked")TypeError: 'Element' üzerinde 'setAttribute' yürütülemedi: 2 bağımsız değişken gerekli, ancak yalnızca 1 tane var
Ivan Rave

@IvanRave Bazı tarayıcılar bu konuda bilgisizdir, diğerleri iyi çalışır.
Niet the Dark Absol


5
  1. kontrol
  2. kontrol = ""
  3. kontrol = "işaretli"

    eşdeğerdir;


spec onay kutusuna göre '---- ⓘ işaretli = "işaretli" veya "" (boş dize) veya boş Öğenin seçilen bir kontrolü temsil ettiğini belirtir. ---'


2

Yanlış kontrol etmenin tek yolunun herhangi bir değeri atlamak olduğu oldukça çılgın bir kasaba. Açısal 1.x ile şunları yapabilirsiniz:

  <input type="radio" ng-checked="false">

Eğer kontrol edilmemesi gerekiyorsa, bu çok daha aklı başında.


2

Bunun yardımcı olabileceğini düşünüyorum:


Önce Microsoft ve W3.org'daki tüm özellikleri okuyun.
Bir onay kutusunun gerçek öğesinin ayarının kullanıcı arayüzünde veya öznitelikte değil ELEMENT PROPERTY üzerinde yapılması gerektiğini görürsünüz.
$('mycheckbox')[0].checked

İkinci olarak, işaretli özelliğin "true", "false" bir dizesini döndürdüğünü bilmeniz gerekir.
Bu neden önemlidir? Çünkü doğru Tipi kullanmanız gerekiyor. Bir dize, boolean değil. Bu, onay kutunuzu ayrıştırırken de önemlidir.
$('mycheckbox')[0].checked = "true"

if($('mycheckbox')[0].checked === "true"){ //do something }

Ayrıca, "işaretli" ATTRIBUTE öğesinin başlangıçta onay kutusunun değerini ayarlamak için olduğunu da bilmeniz gerekir. Öğe DOM'ye dönüştürüldüğünde bu pek bir şey yapmaz. Web sayfası yüklendiğinde ve başlangıçta ayrıştırıldığında bu çalışmayı hayal edin.
Bu konuda IE tercih ile gideceğim:<input type="checkbox" checked="checked"/>

Son olarak, bir onay kutusu için karışıklığın ana yönü, onay kutusu UI öğesinin, öğenin özellik değeri ile aynı olmamasıdır. Doğrudan ilişki göstermezler. .Net içinde çalışıyorsanız, kullanıcının bir onay kutusunu "işaretlediğini" asla denetleyiciye iletilen gerçek bool değerini yansıtmayacağını göreceksiniz. UI ayarlamak için kullandığım hem $('mycheckbox').val(true);ve$('mycheckbox').attr('checked', 'checked');


Kısacası, işaretli bir onay kutusu için gerekenler:
İlk DOM: <input type="checkbox" checked="checked">
Element Özelliği: $('mycheckbox')[0].checked = "true";
UI: $('mycheckbox').val(true);ve$('mycheckbox').attr('checked', 'checked');


-3

Eh, kullanmak için önemli olduğunu düşünmüyorum (devre dışı ve salt okunur), kişisel olarak ben kontrol = "ekose desenli" kullanın ama JavaScript ile onları manipüle etmeye çalışıyorsanız, doğru / yanlış kullanın


5
Hayır. Tarayıcı hatası kurtarma işlemi oldukça iyi olsa bile önemli ( disabledve readonlyçok önemli). Özniteliği JS ile değiştirmek istiyorsanız, hala checkedveya öğesini kullanmalısınız removeAttribute('checked'). checked Mülkiyet alır trueveya false.
Quentin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.