В чем разница между disabled = disabled и readonly = readonly для полей ввода HTML-формы?

Я немного читал об этом, но, похоже, не могу найти ничего достоверного о том, как разные браузеры обрабатывают вещи.


person Andy    schedule 11.10.2011    source источник
comment
связанные: как эмулировать атрибут readonly для тега select и при этом получать данные POST? stackoverflow.com/questions/368813/   -  person Adrien Be    schedule 24.01.2014


Ответы (5)


Элемент readonly просто не редактируется, но отправляется при отправке соответствующего form. Элемент disabled не редактируется и не отправляется при отправке. Другое отличие состоит в том, что readonly элементам можно сфокусироваться (и сфокусироваться при «переходе» по форме), а disabled элементам - нет.

Подробнее об этом читайте в эта замечательная статья или определение w3c. Процитируем важную часть:

Ключевые различия

Атрибут Disabled

  • Значения для отключенных элементов формы не передаются в метод процессора. W3C называет это успешным элементом (это работает аналогично флажкам формы, которые не отмечены).
  • Некоторые браузеры могут переопределять или предоставлять стиль по умолчанию для отключенных элементов формы. (Закрашивание серым или тисненым текстом) Internet Explorer 5.5 особенно неприятен по этому поводу.
  • Отключенные элементы формы не получают фокус.
  • Отключенные элементы формы пропускаются при навигации с помощью вкладок.

Атрибут только для чтения

  • Не все элементы формы имеют атрибут только для чтения. Наиболее примечательно то, что элементы <SELECT>, <OPTION> и <BUTTON> не имеют атрибутов только для чтения (хотя оба они имеют отключенные атрибуты).
  • Браузеры не предоставляют по умолчанию переопределенной визуальной обратной связи, что элемент формы доступен только для чтения. (Это может быть проблемой… см. Ниже.)
  • Элементы формы с установленным атрибутом readonly будут переданы обработчику формы.
  • Элементы формы только для чтения могут получить фокус
  • Элементы формы только для чтения включены в навигацию с вкладками.
person oezi    schedule 11.10.2011
comment
в элементе только для чтения вы не можете использовать CTRL + C, но вы можете щелкнуть правой кнопкой мыши и выбрать Копировать. - person Rumplin; 22.01.2014
comment
@Rumplin ты в этом уверен? Я только что протестировал и смог скопировать с помощью сочетания клавиш в Chrome на OS X. - person evanrmurphy; 09.07.2014
comment
Не все элементы формы имеют атрибут только для чтения. Наиболее примечательно то, что элементы ‹SELECT›, ‹OPTION› и ‹BUTTON› не имеют атрибутов только для чтения (хотя у обоих есть отключенные атрибуты). Вот почему иногда вам нужно использовать отключенный атрибут со скрытым полем ввода для выбранных форм. - person Donato; 26.05.2015
comment
В текущей версии Chrome элементы только для чтения не могут получать фокус. Это проблематично, если вы ожидаете, что пользователи смогут прокручивать значения, длина которых превышает размер ввода. - person Mike Feltman; 04.09.2015
comment
Кроме того, если вы используете Angularjs, ng-readonly = true позволяет вводить фокус на Chrome, то есть, по крайней мере, на firefox. Он по-прежнему не позволяет прокручивать, чтобы увидеть все содержимое усеченного ввода, но вы можете по крайней мере скопировать текст. - person Mike Feltman; 04.09.2015
comment
Итак, насколько я понимаю, disabled подразумевает readonly, но readonly не подразумевает disabled. Другими словами, если элемент имеет атрибут disabled, тогда нет необходимости также включать атрибут readonly. Верный? - person chharvey; 06.12.2015
comment
Ну, я пришел сюда, чтобы исправить комментарий над собой, но потом я понял, что это был мой прошлый я: facepalm :. Но отвечу на свой вопрос: нет, disabled не подразумевает readonly. Значения disabled входов не отправляются с данными формы при отправке, тогда как значения readonly входов отправляются. - person chharvey; 11.07.2020

Никакие события не запускаются, если у элемента есть отключенный атрибут.

Ни одно из перечисленных ниже не сработает.

$("[disabled]").click( function(){ console.log("clicked") });//No Impact
$("[disabled]").hover( function(){ console.log("hovered") });//No Impact
$("[disabled]").dblclick( function(){ console.log("double clicked") });//No Impact

Пока запускается только чтение.

$("[readonly]").click( function(){ console.log("clicked") });//log - clicked
$("[readonly]").hover( function(){ console.log("hovered") });//log - hovered
$("[readonly]").dblclick( function(){ console.log("double clicked") });//log - double clicked
person Hrishabh Gupta    schedule 14.09.2013

Отключено означает, что никакие данные из этого элемента формы не будут отправлены при отправке формы. Только для чтения означает, что любые данные из элемента будут отправлены, но не могут быть изменены пользователем.

Например:

<input type="text" name="yourname" value="Bob" readonly="readonly" />

Это предоставит значение «Bob» для элемента «yourname».

<input type="text" name="yourname" value="Bob" disabled="disabled" />

Это ничего не даст для элемента "ваше имя".

person Michael Irigoyen    schedule 11.10.2011
comment
Оба readonly и disabled являются логическими значениями. Используйте disabled вместо disabled="disabled" (то же самое для чтения) - person Raptor; 06.01.2014
comment
Оба семантически верны. HTML5 позволяет использовать и то, и другое. - person Michael Irigoyen; 06.01.2014
comment
Бесконтекстное увещевание использовать только имена атрибутов, без значений, не рекомендуется, потому что тогда код не будет действительным XML / XHTML. Я знаю, что многих разработчиков это не волнует, но они должны хотя бы знать об этой ловушке. Лично я стремлюсь к совместимости с XHTML - если нет веской причины, которую я еще не получил, - поэтому я использую длинную / дублированную форму. - person underscore_d; 03.09.2015
comment
@underscore_d - я считаю длинную дублированную форму громоздкой. Почему бы не использовать пустую строку, что тоже разрешено? readonly="" - person ToolmakerSteve; 01.09.2016
comment
@ToolmakerSteve У вас есть указание на то, что пустые строки являются допустимыми XHTML? Я могу найти только страницы с комментариями, где говорится, что это действительно для HTML5. Все, кого я видел, говоря о XHTML, говорят, что его форма для логических атрибутов должна быть attrname="attrname". В любом случае, это не кажется особенно хорошо задокументированным, по крайней мере, я не могу найти. Ну вот и это - w3.org/TR/html4 /intro/sgmltut.html#h-3.3.4.2 - но здесь конкретно упоминаются только SGML и HTML, а не XHTML .... слишком много сокращений: S - person underscore_d; 01.09.2016
comment
... но пропуская бит для HTML, где наличие / отсутствие достаточно - мы получаем это, что, по-видимому, применимо путем пропуска к XHTML: Boolean attributes may legally take a single value: the name of the attribute itself (e.g., selected="selected"). Таким образом, пустая строка кажется недействительной. - person underscore_d; 01.09.2016
comment
@underscore_d Согласно спецификации WHATWG (HTML5 по состоянию на 2020 г.): если у логического атрибута есть значение (которое сделало бы его совместимым с XML), есть только два допустимых значения: пустая строка или совпадение имени атрибута без учета регистра. Итак, selected="" разрешен в HTML5. - person chharvey; 11.07.2020
comment
@chharvey Я говорил о XHTML, а не о HTML. - person underscore_d; 11.07.2020

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

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

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

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

person Tim    schedule 11.10.2011

Если значение отключенного текстового поля необходимо сохранить при очистке формы (сбросе), необходимо использовать disabled = "disabled", поскольку текстовое поле только для чтения не сохранит значение

Например:

HTML

Текстовое окно

<input type="text" id="disabledText" name="randombox" value="demo" disabled="disabled" />

Кнопка сброса

<button type="reset" id="clearButton">Clear</button>

В приведенном выше примере при нажатии кнопки Очистить отключенное текстовое значение будет сохранено в форме. Значение не будет сохранено в случае input type = "text" readonly="readonly"

person Syed    schedule 23.04.2020