Мы все знаем, как сформировать флажок ввода в 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">
Является ли ответ, что это не имеет значения? Я не вижу никаких доказательств ответа, помеченного как правильный, здесь из самой спецификации :
Флажки (и переключатели) являются переключателями включения / выключения, которые могут переключаться пользователем. Переключатель включен, когда установлен атрибут проверяемого элемента управления. Когда форма отправлена, только элементы управления «вкл» могут стать успешными. Несколько флажков в форме могут иметь одно и то же имя элемента управления. Так, например, флажки позволяют пользователям выбирать несколько значений для одного свойства. Элемент INPUT используется для создания элемента управления флажок.
Что, по словам автора спецификации, является правильным ответом? Пожалуйста, предоставьте обоснованные ответы.
источник
Ответы:
Строго говоря, вы должны поместить что-то, что имеет смысл - согласно спецификации здесь , самая правильная версия:
Для HTML, вы можете также использовать синтаксис пустого атрибута ,
checked=""
или даже простоchecked
(для более строгого XHTML, это не поддерживается ).Однако в действительности большинство браузеров поддерживают практически любое значение между кавычками. Все следующее будет проверено:
И только следующее будет не проверено:
Смотрите также этот похожий вопрос
disabled="disabled"
.источник
checked (checked)
что означает «Проверенный атрибут может иметь значение„проверено“) только.checked
Является допустимым значением, ни один из других не. Булевы атрибуты позволяют опускать все , кроме значения , такchecked
приемлемо а такжеchecked="checked"
.checked
,checked=""
иchecked="checked"
все в порядке. w3.org/TR/html-markup/input.checkbox.html"checked"
без имени атрибута и заставить его работать правильно.checked
, использование автозаполнения = «выключено» , чтобы ваш браузер автоматически проверять его.HTML5 spec :
http://www.w3.org/TR/html5/forms.html#attr-input-checked :
http://www.w3.org/TR/html5/infrastructure.html#boolean-attributes :
Вывод :
Следующее является действительным, эквивалентным и верным :
Следующее недействительно :
Отсутствие атрибута является единственным допустимым синтаксисом для false :
Рекомендация
Если вы хотите написать действительный XHTML, используйте
checked="checked"
, поскольку<input checked>
недопустимый XHTML (но действительный HTML), а другие альтернативы менее читабельны. Остальное, просто используйте<input checked>
как короче.источник
Те одинаково действительны. И в JavaScript:
источник
input.setAttribute("checked")
Ошибка типа: не удалось выполнить setAttribute для элемента: требуется 2 аргумента, но присутствует только 1Вы хотите этого, я думаю:
checked='checked'
источник
проверено = «проверено»
эквивалентны;
в соответствии со спецификацией флажок «---- ⓘ флажок =« проверено »или« »(пустая строка) или пусто Указывает, что элемент представляет выбранный элемент управления .--- '
источник
Это довольно сумасшедший город, в котором единственный способ сделать флажок ложным - не указывать значения. С Angular 1.x вы можете сделать это:
что намного более вменяемое, если вам нужно, чтобы это не проверялось.
источник
Я думаю, что это может помочь:
Сначала прочитайте все спецификации от 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');
источник
Ну, чтобы использовать его, я не думаю, что имеет значение (похоже на отключено и только для чтения), лично я использую Check = "Check", но если вы пытаетесь манипулировать ими с помощью JavaScript, вы используете true / false
источник
disabled
иreadonly
тоже) , даже если исправление ошибок браузера довольно хорошо. Если вы хотите манипулировать атрибутом с помощью JS, вам все равно следует использоватьchecked
илиremoveAttribute('checked')
.checked
Свойство принимаетtrue
илиfalse
.