Подтвердить что ты не робот

В чем разница между readonly = "true" и readonly = "readonly"?

В чем разница между:

<input name="TextBox1" type="text" id="TextBox1" readonly="true" />

и

<input name="TextBox1" type="text" id="TextBox1" readonly="readonly" />

Когда я устанавливаю readonly в true, он несколько отличается от readonly='readonly'. Стандарт W3C говорит, что readonly должен быть 'readonly', а не 'true'. Почему большинство браузеров допускают readonly='true', который имеет несколько иные функциональные возможности, чем readonly='readonly'?

4b9b3361

Ответ 1

Предоставление элемента атрибуту readonly даст этому элементу статус readonly. Не имеет значения, какое значение вы ставите после него, или если вы поместите какое-либо значение после него, оно все равно будет воспринимать его как прочитанное. Ввод readonly="false" не будет работать.

Предлагается использовать стандарт W3C.

Ответ 2

Это свойство, а не признанный атрибут

Эти параметры свойств являются значениями для каждого изображения и не требуют каких-либо назначений для них. Когда они присутствуют, элемент имеет это логическое свойство, установленное в true, когда они отсутствуют, они false.

<input type="text" readonly />

На самом деле это браузеры, которые либеральны для присвоения значений им. Если вы присвоите им какое-либо значение, оно просто проигнорируется. Браузеры будут видеть только наличие определенного свойства и игнорировать значение, которое вы пытаетесь назначить им.

Это, конечно, хорошо, потому что некоторые фреймворки не имеют возможности добавлять такие свойства, не предоставляя их ценность вместе с ними. Помощники Asp.net MVC Html - один из них. jQuery был прежним до версии 1.6, где они добавили понятие свойств.

Конечно, есть некоторые последствия, связанные с XHTML, поскольку атрибуты в XML нуждаются в значениях, чтобы быть хорошо сформированными. Но это другая история. Следовательно, браузеры должны игнорировать назначения значений.

В любом случае. Не обращайте внимания на значение, которое вы назначаете им, пока имя правильно написано, чтобы оно было обнаружено браузерами. Но для удобочитаемости и ремонтопригодности лучше назначать им значимые значения, например:

readonly="true" <-- arguably best human readable
readonly="readonly"

в отличие от

readonly="johndoe"
readonly="01/01/2000"

которые могут запутать будущих разработчиков, поддерживающих ваш код, и могут помешать будущей спецификации, которые могут определять более строгие правила для таких настроек свойств.

Ответ 3

readonly="true" имеет значение недействительный HTML5, readonly="readonly".

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

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

Атрибут readonly является логическим атрибутом

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

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

Если атрибут присутствует, его значение должно быть либо пустой строкой, либо значением, которое не соответствует значению ASCII для канонического имени атрибута, без начального или конечного пробела.

Заключение

Ниже приведены действительные, эквивалентные и истинные:

<input type="text" readonly />
<input type="text" readonly="" />
<input type="text" readonly="readonly" />
<input type="text" readonly="ReAdOnLy" />

Ниже приведены недействительные:

<input type="text" readonly="0" />
<input type="text" readonly="1" />
<input type="text" readonly="false" />
<input type="text" readonly="true" />

Отсутствие атрибута является единственным допустимым синтаксисом для false:

<input type="text"/>

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

Если вы хотите написать действительный XHTML, используйте readonly="readonly", так как <input readonly> является недопустимым, а другие альтернативы менее читабельны. Иначе просто используйте <input readonly>, поскольку он короче.

Ответ 4

readonly="readonly" - синтаксис xhtml. В xhtml логические атрибуты написаны таким образом. В xhtml "минимизация атрибута" (<input type="checkbox" checked>) недопустимо, поэтому это допустимый способ включения логических атрибутов в xhtml. Подробнее см. эту страницу.

Если ваш тип является xhtml переходным или строгим, и вы хотите его проверить, используйте readonly="readonly в противном случае readonly.

Ответ 5

Я не уверен, как они функционально отличаются друг от друга. Моя текущая серия браузеров OS X не показывает разницы.

Я бы предположил, что все они функционально одинаковы из-за обработки устаревшего HTML-атрибута. Еще в тот же день любой флаг (логический) атрибут должен присутствовать только, sans value, например

<input readonly>
<option selected>

Когда XHTML пришел, этот синтаксис недействителен и значения были необходимы. Хотя W3, заданный с использованием имени атрибута в качестве значения, я предполагаю, что большинство поставщиков браузеров решили просто проверить наличие атрибута.

Ответ 6

В соответствии со стандартами HTML использование

<input name="TextBox1" type="text" id="TextBox1" readonly/>

достаточно, чтобы сделать входной элемент readonly. Но в стандарте XHTML указано, что использование, указанное выше, является недопустимым из-за attribute minimization. Вы можете обратиться к ссылкам ниже:

https://www.w3.org/TR/xhtml1/diffs.html#h-4.5

http://www.w3schools.com/tags/att_input_readonly.asp