Codectionary / Developer documentation / HTML

disabled versus readonly Controls

disabled controls cannot be edited or normally focused and are omitted from form submission. readonly prevents editing on supported text-like controls but leaves their values available to submission and generally allows focus and copying. readonly does not apply to checkboxes or select elements.

Syntax

<input name="reference" value="INV-7" readonly>
<input name="internal" value="draft" disabled>

Examples

disabled versus readonly Controls: working example

Save as an HTML file and open it in a browser. Expected result: Inspect values displays {"reference":"INV-7"}; internal is omitted.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Working example</title>
</head>
<body>
<form id="invoice">
  <label>Reference <input name="reference" value="INV-7" readonly></label>
  <label>Internal state <input name="internal" value="draft" disabled></label>
  <button type="submit">Inspect values</button>
</form>
<pre id="values"></pre>
<script>
document.querySelector("#invoice").addEventListener("submit", event => {
  event.preventDefault();
  document.querySelector("#values").textContent = JSON.stringify(Object.fromEntries(new FormData(event.currentTarget)));
});
</script>
</body>
</html>
  1. Expected result: Inspect values displays {"reference":"INV-7"}; internal is omitted.
  2. Both attributes are boolean: their presence enables the behavior.
  3. A readonly field is still submitted, but neither attribute is a security boundary.

Best practices

  • Use readonly when users need to copy a noneditable text value.
  • Recheck protected values on the server because clients can modify the DOM.

Browser compatibility

Support applies to the named feature, not every attribute or behaviour in this article. Versions refer to browsers, not operating systems.

<input> disabled

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> readonly

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
From 1
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • From 1

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<textarea> readonly

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
By 4 (possibly earlier)
Edge
Supported
From 12
Opera
Supported
By 12.1 (possibly earlier)

Mobile

Safari on iOS
Supported
By 3.2 (possibly earlier)
Chrome for Android
Supported
From 18
Firefox for Android
Supported
From 4
Samsung Internet
Supported
From 1.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 1

Firefox

  • From 1

Safari

  • By 4 (possibly earlier)

Edge

  • From 12

Opera

  • By 12.1 (possibly earlier)

Safari on iOS

  • By 3.2 (possibly earlier)

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0

MDN BCD 8.1.5 · Dataset built 2026-10-08 · Mapping reviewed 2026-10-21. These dates are not individual browser-test or claim-verification dates. Unknown means the data does not establish support.

HTML Living Standard

Specifications & further reading