Яка різниця між відключеними = "вимкнено" та "лише для читання" для полів введення 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.