Codectionary / Developer documentation / HTML

Checkbox Groups and Submitted Values

Checked checkboxes contribute their name and value to form data; unchecked boxes contribute no entry. Multiple checked boxes can share a name to submit multiple values. FormData.getAll() preserves the full group, whereas get() returns only the first matching value.

Syntax

<input type="checkbox" name="topic" value="html" checked>
new FormData(form).getAll("topic")

Examples

Checkbox Groups and Submitted Values: working example

Save as an HTML file and open it in a browser. Expected result: Initially submission displays html; selecting CSS too displays html, css; clearing both displays None.

<!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="topics">
<fieldset><legend>Topics</legend>
<label><input type="checkbox" name="topic" value="html" checked> HTML</label>
<label><input type="checkbox" name="topic" value="css"> CSS</label>
</fieldset>
<button type="submit">Show selection</button>
</form>
<output id="selection"></output>
<script>
document.querySelector("#topics").addEventListener("submit", event => {
  event.preventDefault();
  const values = new FormData(event.currentTarget).getAll("topic");
  document.querySelector("#selection").textContent = values.join(", ") || "None";
});
</script>
</body>
</html>
  1. Expected result: Initially submission displays html; selecting CSS too displays html, css; clearing both displays None.
  2. Explicit value attributes avoid the default checkbox value on.
  3. An empty result means no boxes in this group contributed entries.

Best practices

  • Use getAll for repeated names rather than converting directly to a plain object.
  • Group related choices with fieldset and legend.

Browser compatibility

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

<input> type="checkbox"

Desktop

Chrome
Supported
From 1
Firefox
Supported
From 1
Safari
Supported
From 1
Edge
Supported
From 12
Opera
Supported
From 15

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

  • From 15

Safari on iOS

  • From 1

Chrome for Android

  • From 18

Firefox for Android

  • From 4

Samsung Internet

  • From 1.0
<input> checked

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
FormData

Desktop

Chrome
Supported
From 5
Firefox
Supported
From 4
Safari
Supported
From 5
Edge
Supported
From 12
Opera
Supported
From 12

Mobile

Safari on iOS
Supported
From 5
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 5

Firefox

  • From 4 · Before Firefox 7, specifying a Blob as the data to append to the object, the filename reported in the Content-Disposition HTTP header was an empty string, resulting in errors on some servers. Starting with Firefox 7, the filename blob is sent.

Safari

  • From 5

Edge

  • From 12

Opera

  • From 12

Safari on iOS

  • From 5

Chrome for Android

  • From 18

Firefox for Android

  • From 4 · Before Firefox for Android 7, specifying a Blob as the data to append to the object, the filename reported in the Content-Disposition HTTP header was an empty string, resulting in errors on some servers. Starting with Firefox for Android 7, the filename blob is sent.

Samsung Internet

  • From 1.0
FormData.getAll

Desktop

Chrome
Supported
From 50
Firefox
Supported
From 39
Safari
Supported
From 11.1
Edge
Supported
From 18
Opera
Supported
From 37

Mobile

Safari on iOS
Supported
From 11.3
Chrome for Android
Supported
From 50
Firefox for Android
Supported
From 39
Samsung Internet
Supported
From 5.0

MDN BCD record for this feature · MDN reference

Support history and limitations

Chrome

  • From 50

Firefox

  • From 39

Safari

  • From 11.1

Edge

  • From 18

Opera

  • From 37

Safari on iOS

  • From 11.3

Chrome for Android

  • From 50

Firefox for Android

  • From 39

Samsung Internet

  • From 5.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