Using Checkboxes to Make Forms More Friendly
Validation
Checkboxes do support validation (offered to all <input>
s). However, most of the ValidityState
s will always be false
. If the checkbox has the required
attribute, but is not checked, then ValidityState.valueMissing
will be true
.
Examples
The
following example is an extended version of the "multiple checkboxes"
example - it has more standard options, plus an "other"
checkbox that when checked causes a text field to appear to enter a
value for the "other" option. This is achieved with a simple block of
JavaScript. The example includes implicit labels, with the <input>
directly inside the <label>
. The text input, without a visible label, includes the aria-label
attribute which provides its accessible name. This example also includes some CSS to improve the styling.
HTML
<form> <fieldset> <legend>Choose your interests</legend> <div> <label> <input type="checkbox" id="coding" name="interest" value="coding" /> Coding </label> </div> <div> <label> <input type="checkbox" id="music" name="interest" value="music" /> Music </label> </div> <div> <label> <input type="checkbox" id="art" name="interest" value="art" /> Art </label> </div> <div> <label> <input type="checkbox" id="sports" name="interest" value="sports" /> Sports </label> </div> <div> <label> <input type="checkbox" id="cooking" name="interest" value="cooking" /> Cooking </label> </div> <div> <label> <input type="checkbox" id="other" name="interest" value="other" /> Other </label> <input type="text" id="otherValue" name="other" aria-label="Other interest" /> </div> <div> <button type="submit">Submit form</button> </div> </fieldset> </form>
CSS
html { font-family: sans-serif; } form { width: 600px; margin: 0 auto; } div { margin-bottom: 10px; } fieldset { background: cyan; border: 5px solid blue; } legend { padding: 10px; background: blue; color: cyan; }
JavaScript
const otherCheckbox = document.querySelector("#other"); const otherText = document.querySelector("#otherValue"); otherText.style.visibility = "hidden"; otherCheckbox.addEventListener("change", () => { if (otherCheckbox.checked) { otherText.style.visibility = "visible"; otherText.value = ""; } else { otherText.style.visibility = "hidden"; } });