Яке правильне значення для позначеного атрибута прапорця HTML?


436

Усі ми знаємо, як сформувати вхідний прапорець у HTML:

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

Що я не знаю - яке технічно правильне значення для встановленого прапорця? Я бачив ці всі роботи:

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

Це відповідь, що це не має значення? Я не бачу доказів відповіді, позначеної тут як правильна, від самої специфікації :

Поле прапорців (і радіо кнопки) - це перемикачі вмикання / вимикання, які користувач може перемикати. Перемикач "включений", коли встановлений перевірений атрибут елемента керування. При надсиланні форми, лише "on" елементи керування можуть стати успішними. Кілька прапорців у формі можуть мати одне й те саме ім'я керування. Так, наприклад, прапорці дозволяють користувачам вибирати кілька значень для однієї властивості. Елемент INPUT використовується для створення елемента керування.

Що скаже письменник-специфік - це правильна відповідь? Надайте відповіді, засновані на доказах.


У резюме запитання ви згадуєте значення для позначеного атрибута, однак в описі питання ви обговорюєте правильне значення для встановленого прапорця. "Значення" прапорця відрізняється від атрибута, який я позначено, я вважаю, що в описі вашого питання ви також мали на увазі значення атрибута, можливо, ви хочете скорегувати опис питання. Для «значення» огляд прапорці stackoverflow.com/questions/14323899 / ...
melutovich

Відповіді:


451

Строго кажучи, вам слід поставити щось, що має сенс - відповідно до специфікації тут , найбільш правильною є версія:

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

Для HTML, ви можете також використовувати синтаксис порожнього атрибута , checked=""або навіть просто checked(для більш суворого XHTML, це не підтримуються ).

Однак, ефективніше більшість браузерів підтримуватимуть будь-яке значення між цитатами. Буде перевірено все наступне:

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

І не буде відмічено лише наступне:

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

Дивіться також подібне запитання на disabled="disabled".


39
Це неправильно. Якщо ви подивитеся на специфікацію , він говорить: checked (checked)що означає "Атрибут, що перевіряється, може мати значення" перевірено "). Тільки checkedприйнятне значення, жоден з інших не є. Булеві атрибути дозволяють опускати все, крім значення, так що checkedце прийнятно. а також checked="checked".
Квентін

14
Сторінка W3, орієнтована на HTML5, говорить про те checked, що checked="", і checked="checked"все в порядку. w3.org/TR/html-markup/input.checkbox.html
Райан Вільямс

1
@Quentin Вибачаю, що це речення не має для мене сенсу. Ви мали на увазі, що можете опустити все, крім назви атрибута? Тому що якщо ви могли опустити все, окрім значення , ви могли просто написати "checked", без імені атрибута, і зробити це правильно.
Ганнеле

4
@Quentin tl, dr: Це семантика, але синтаксис порожнього атрибута вказує лише ім'я атрибута, а не значення .
Ганнеле

1
Якщо прапорець залишається відміченим (під час перезавантаження сторінки), незважаючи на те, що атрибут boolean / empty не пустили checked , використовуйте autocomplete = "off", щоб ваш браузер не перевіряв його автоматично.
обробляти

58

Специфікація HTML5 :

http://www.w3.org/TR/html5/forms.html#attr-input- перевірено :

Атрибут вимкнення вмісту є булевим атрибутом.

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

Наявність булевого атрибута на елементі представляє справжнє значення, а відсутність атрибута представляє помилкове значення.

Якщо атрибут присутній, його значення повинно бути або порожнім рядком, або значенням, яке є невідчутним до регістру ASCII для канонічного імені атрибута, без провідної чи кінцевої пробілів.

Висновок :

Наступні дійсні, еквівалентні та вірні :

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

Наступні недійсні :

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

Відсутність атрибута є єдиним допустимим синтаксисом для помилкових :

<input />

Рекомендація

Якщо ви хочете писати дійсні XHTML, використовуйте checked="checked", оскільки <input checked>недійсний XHTML (але дійсний HTML) та інші альтернативи менш читаються. Інше, просто використовувати, <input checked>як це коротше.


2
Я вирішив відмовитись, щоб змінити 2, і зберегти специфікацію першою. Хоча приклади спочатку - це шлях в цілому, я вважаю, що це є різним аспектом цієї відповіді стосовно поточних перших, які наводять лише приклади. Дякую за пропозицію, хоча :-)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

2
Я думаю, що це правильна відповідь, підкреслюючи, що відсутність означає помилкову. Хоча = "true" працює, це означає, що = "false" працюватиме за бажанням, але це не так.
амарки

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

Вони однаково справедливі. І в JavaScript:

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

4
setAttribute змінює розмітку DOM , призначення властивості не потрібно.
користувач2864740

input.setAttribute("checked")TypeError: Не вдалося виконати 'setAttribute' на 'Element': потрібні 2 аргументи, але лише 1 присутній
Іван Рейв

@IvanRave Деякі браузери відносяться до цього, а інші працюватимуть чудово.
Niet the Dark Absol


5
  1. перевірено
  2. перевірено = ""
  3. checked = "перевірено"

    рівнозначні;


відповідно до прапорця spec '---- ⓘ check = "check" або "" (порожній рядок) або empty Вказує, що елемент являє собою вибраний елемент керування .---'


2

Це досить божевільне містечко, що єдиний спосіб зробити перевірену помилкову - пропустити будь-які значення. За допомогою кутового 1.x ви можете це зробити:

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

що набагато більш розумно, якщо вам потрібно зробити це без перевірки.


2

Я думаю, що це може допомогти:


Спочатку прочитайте всі характеристики від Microsoft та W3.org.
Ви побачите, що встановлення фактичного елемента прапорця потрібно робити на ЕЛЕМЕНТУ ВЛАСНІСТЬ, а не інтерфейс користувача або атрибут.
$('mycheckbox')[0].checked

По-друге, вам потрібно знати, що перевірений атрибут ВІДКРИТИ рядок "true", "false"
Чому це важливо? Тому що вам потрібно використовувати правильний тип. Рядок, а не булевий. Це також важливо при розборі прапорця.
$('mycheckbox')[0].checked = "true"

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

Вам також потрібно усвідомити, що "Позначений" ATTRIBUTE призначений для встановлення значення прапорець спочатку. Це не робить багато, коли елемент буде надано DOM. Зобразіть це, коли веб-сторінка завантажується та спочатку проаналізована.
Я перейду з перевагою IE щодо цього:<input type="checkbox" checked="checked"/>

Нарешті, головний аспект плутанини для прапорця полягає в тому, що елемент інтерфейсу прапорця не є таким, як значення властивості елемента. Вони не співвідносяться безпосередньо. Якщо ви працюєте в .net, ви виявите, що користувач "перевіряє" прапорець ніколи не відображає фактичне значення bool, передане контролеру. Щоб встановити інтерфейс, я використовую і $('mycheckbox').val(true);та, і$('mycheckbox').attr('checked', 'checked');


Коротше кажучи, для встановленого прапорця вам потрібно:
Початковий DOM: <input type="checkbox" checked="checked">
Елемент властивості: $('mycheckbox')[0].checked = "true";
UI: $('mycheckbox').val(true);і$('mycheckbox').attr('checked', 'checked');


-3

Ну, щоб використовувати його, я не думаю, що має значення (подібно до вимкнених та readonly), особисто я використовую прапорець = "перевірено", але якщо ви намагаєтесь маніпулювати ними JavaScript, ви використовуєте true / false


5
Ні. Це має значення (це має значення disabledі для readonly), навіть якщо відновлення помилок браузера досить добре. Якщо ви хочете маніпулювати атрибутом за допомогою JS, тоді вам все одно слід використовувати checkedабо removeAttribute('checked'). checked Властивість приймає trueабо false.
Квентін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.