Яка різниця між відключеними = "вимкнено" та "лише для читання" для полів введення HTML-форми?


435

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


related: "як емулювати атрибут readonly для виділеного тегу та все-таки отримати дані POST?" stackoverflow.com/questions/368813/…
Adrien Be

Відповіді:


728

readonlyЕлемент просто не редагується, але відправляється , коли по formПРЕДСТАВЛЯЄ. disabledЕлемент не редагується і не відправляється на кнопку. Ще одна відмінність полягає в тому, що readonlyелементи можуть бути сфокусовані (і зосередитись, коли "вкладка" через форму), а disabledелементи не можуть.

Детальніше про це читайте у цій чудовій статті чи визначенні w3c . Процитуйте важливу частину:

Ключові відмінності

Атрибут Disabled

  • Значення для відключених елементів форми не передаються методу процесора. W3C називає це успішним елементом. (Це працює аналогічно формам прапорців, які не встановлені.)
  • Деякі веб-переглядачі можуть змінювати або надавати стилі за замовчуванням для відключених елементів форми. (Сивий текст або тиснення тексту) Internet Explorer 5.5 з цього приводу особливо неприємний.
  • Інвалідні форми елементів не отримують фокус.
  • Елементи форми з обмеженими можливостями пропускаються в навігації по вкладках.

Атрибут "лише читання"

  • Не всі елементи форми мають атрибут лише для читання. Найбільш помітним, що <SELECT>, <OPTION>і <BUTTON>елементи не мають атрибути тільки для читання (хоча обидва вони відключили атрибути)
  • Браузери не забезпечують переоформлення візуального зворотного зв’язку за замовчуванням, що елемент форми лише для читання. (Це може бути проблемою ... див. Нижче.)
  • Елементи форми з набором атрибутів readonly передаються в процесор форми.
  • Фокус можуть отримати лише елементи форми, які можуть читати
  • Елементи форми лише для читання включаються в навігацію з вкладками.

5
на елементі readonly ви не можете використовувати CTRL + C, але ви можете скористатися правою кнопкою миші та виберіть Copy.
Рамплін

7
@Rumplin Ви впевнені в цьому? Я щойно тестував і зміг скопіювати комбінацію клавіш у Chrome на OS X.
evanrmurphy

5
"Не всі елементи форми мають атрибут" лише для читання ". Більшість помітних елементів <SELECT>, <OPTION> та <BUTTON> не мають атрибутів лише для читання (хоча у обох вимкнено атрибути)". Ось чому іноді доводиться використовувати атрибут "вимкнено" із прихованим полем введення для обраних форм.
Донато

У поточній версії Chrome лише елементи з читання не можуть отримувати фокус. Це проблематично, якщо ви очікуєте, що користувачі зможуть прокручувати значення, що перевищують розмір вводу.
Майк Фельтман

5
Тому моє розуміння disabled означає, readonly але readonlyне означає disabled. Іншими словами, якщо елемент має disabledатрибут, то також не потрібно включати readonlyатрибут. Правильно?
chharvey

91

Жодні події не спрацьовують, коли елемент не має атрибута вимкнено.

Жодне з наведеного нижче не буде спрацьовувати.

$("[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

35

Відключений означає, що під час подання форми дані з цього елемента форми не надсилатимуться. Тільки для читання означає, що будь-які дані з елемента будуть передані, але користувач не може їх змінити.

Наприклад:

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

Це подасть значення "Bob" для елемента "yourname".

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

При цьому нічого не буде представлено для елемента "ваше ім'я".


6
І те readonlyй disabledінше булеві значення. Використовуйте disabledзамість disabled="disabled"(те саме для readonly)
Раптор

5
Обидва семантично правильні. HTML5 дозволяє використовувати будь-який.
Майкл Ірігойен

3
Контекстне застереження використовувати лише імена атрибутів, без значень, є недоцільним - адже тоді код не буде дійсним XML / XHTML. Я знаю, що багато хто з них не переймається цим, але вони повинні, принаймні, бути в курсі підводних проблем. Особисто я прагну до дотримання XHTML - якщо не вказано вагомих причин, яких я ще не отримав - тому використовую довгу / дублюючу форму.
підкреслити_30

1
@ToolmakerSteve У вас є специфікація, що порожні рядки є дійсними XHTML? Я можу знайти лише сторінки коментарів, які стверджують, що він дійсний для HTML5. Усі, кого я бачив, як говорили про XHTML, кажуть, що його форма для булевих атрибутів повинна бути attrname="attrname". Так чи інакше, це не дуже добре задокументоване, принаймні, не те, що я можу знайти. Ну, ось це - w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2 - але в ньому специфічно згадуються SGML та HTML, а не XHTML .... занадто багато абревіатур: S
underscore_d

1
... але пропускаючи біт для HTML, де присутності / відсутності достатньо - ми отримуємо це, що, імовірно, застосовується через опущення до XHTML: Boolean attributes may legally take a single value: the name of the attribute itself (e.g., selected="selected").Отже, порожній рядок не здається дійсним.
підкреслюй_d

4

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

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

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

Поле лише для читання неможливо змінити. Однак користувач може вкладати на нього вкладку, виділяти її та копіювати текст із неї.


1

Якщо значення відключеного текстового поля потрібно зберегти, коли форма очищена (скидається), 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"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.