113 commands · 8 cheat sheets · HTML
Forms and Interaction master quick reference
Browse 113 commands from 8 focused cheat sheets on page 1 of 1. Each example opens its matching detailed section.
Forms and Interaction · 12 commands
HTML Buttons and Native Controls Cheat Sheet
| Use | Syntax | Examples |
|---|---|---|
| Neutral button | <button type="button">Preview</button> | View examples |
| Submit button | <button type="submit">Save</button> | View examples |
| Reset button | <button type="reset">Reset</button> | View examples |
| Disable a control | <button type="button" disabled>Unavailable</button> | View examples |
| Associate with another form | <button type="submit" form="profile">
Save profile
</button> | View examples |
| Single select | <select name="region">
<option value="sa">South America</option>
</select> | View examples |
| Multiple select | <select name="roles" multiple>
<option>Editor</option>
</select> | View examples |
| Group options | <optgroup label="Americas">
<option value="br">Brazil</option>
</optgroup> | View examples |
| Known progress | <progress value="65" max="100">65%</progress> | View examples |
| Unknown progress | <progress>Loading</progress> | View examples |
| Scalar measurement | <meter
min="0"
max="100"
low="30"
high="80"
optimum="90"
value="72">
72
</meter> | View examples |
| Calculation output | <output for="price quantity" name="total">0</output> | View examples |
Forms and Interaction · 18 commands
HTML Constraint Validation API Cheat Sheet
| Use | Syntax | Examples |
|---|---|---|
| Require a value | <input id="email" name="email" type="email" required> | View examples |
| Constrain text length | <input name="username" minlength="3" maxlength="24"> | View examples |
| Require a text pattern | <input
name="code"
pattern="[A-Z]{3}-[0-9]{4}"
title="AAA-1234"> | View examples |
| Constrain a number | <input
name="quantity"
type="number"
min="1"
max="20"
step="1"> | View examples |
| Check validation eligibility | if (control.willValidate) inspect(control.validity) | View examples |
| Inspect the validity state | const { valueMissing, typeMismatch, valid } = email.validity | View examples |
| Read the browser message | const message = control.validationMessage | View examples |
| Check one control | const valid = control.checkValidity() | View examples |
| Check a whole form | const valid = form.checkValidity() | View examples |
| Report invalid controls | const valid = form.reportValidity() | View examples |
| Capture invalid events | form.addEventListener('invalid', handleInvalid, true) | View examples |
| Set a custom error | confirmation.setCustomValidity('Email addresses must match.') | View examples |
| Clear a custom error | confirmation.setCustomValidity('') | View examples |
| Request normal submission | form.requestSubmit(saveButton) | View examples |
| Submit without validation | HTMLFormElement.prototype.submit.call(form) | View examples |
| Disable submit-time validation | <form action="/import" method="post" novalidate> | View examples |
| Bypass validation for one action | <button
type="submit"
formnovalidate
name="action"
value="draft">
Save draft
</button> | View examples |
| Style invalid user input | input:user-invalid { border-color: var(--error-color); } | View examples |
Forms and Interaction · 13 commands
HTML contenteditable and Editing Events Cheat Sheet
| Use | Syntax | Examples |
|---|---|---|
| Create a rich-text host | <div contenteditable="true" aria-label="Post body">
</div> | View examples |
| Create a plain-text host | <div
contenteditable="plaintext-only"
aria-label="Summary">
</div> | View examples |
| Opt out inside a host | <span contenteditable="false">Locked token</span> | View examples |
| Inspect effective state | editor.isContentEditable | View examples |
| Observe editing intent | editor.addEventListener('beforeinput', handleBeforeInput) | View examples |
| Read operation type | event.inputType === 'insertText' | View examples |
| React after mutation | editor.addEventListener('input', saveDraft) | View examples |
| Read plain text | const value = editor.textContent | View examples |
| Set trusted plain text | editor.replaceChildren(document.createTextNode(value)) | View examples |
| Focus a nested host | <div contenteditable="true" tabindex="0"></div> | View examples |
| Suggest a keyboard | <div
contenteditable="plaintext-only"
inputmode="numeric">
</div> | View examples |
| Request spellchecking | <div contenteditable="true" spellcheck="true"></div> | View examples |
| Render saved text safely | preview.textContent = savedValue | View examples |
Forms and Interaction · 15 commands
HTML Disclosures, Dialogs, and Popovers Cheat Sheet
| Use | Syntax | Examples |
|---|---|---|
| Create a disclosure | <details>
<summary>More options</summary>
<p>Details</p>
</details> | View examples |
| Open initially | <details open>
<summary>Status</summary>
<p>Ready</p>
</details> | View examples |
| Group disclosures | <details name="faq">
<summary>Question</summary>
<p>Answer</p>
</details> | View examples |
| Declare a dialog | <dialog id="settings"><p>Settings</p></dialog> | View examples |
| Open modally | document.querySelector('#settings').showModal() | View examples |
| Open non-modally | document.querySelector('#settings').show() | View examples |
| Close with a result | document.querySelector('#settings').close('saved') | View examples |
| Submit and close | <form method="dialog">
<button value="cancel">Cancel</button>
</form> | View examples |
| Style the modal backdrop | dialog::backdrop { background: rgb(0 0 0 / 55%); } | View examples |
| Declare an auto popover | <div id="help" popover>Helpful text</div> | View examples |
| Toggle declaratively | <button popovertarget="help">Help</button> | View examples |
| Choose an action | <button popovertarget="help" popovertargetaction="show">
Show help
</button> | View examples |
| Keep a popover open | <div id="status" popover="manual">Saved</div> | View examples |
| Show with JavaScript | document.querySelector('#status').showPopover() | View examples |
| Style an open popover | [popover]:popover-open { opacity: 1; } | View examples |
Forms and Interaction · 13 commands
HTML Drag and Drop and DataTransfer Cheat Sheet
| Use | Syntax | Examples |
|---|---|---|
| Make a source draggable | <li draggable="true" data-item-id="task-42">
Review draft
</li> | View examples |
| Write a typed payload | event.dataTransfer.setData('application/x-task-id', taskId) | View examples |
| Limit source operations | event.dataTransfer.effectAllowed = 'move' | View examples |
| Set drag feedback | event.dataTransfer.setDragImage(preview, 16, 16) | View examples |
| Accept drag entry | zone.addEventListener('dragenter', event => event.preventDefault()) | View examples |
| Enable dropping | zone.addEventListener('dragover', event => event.preventDefault()) | View examples |
| Show copy feedback | event.dataTransfer.dropEffect = 'copy' | View examples |
| Inspect offered formats | event.dataTransfer.types.includes('text/plain') | View examples |
| Inspect transfer items | [...event.dataTransfer.items].some(item => item.kind === 'file') | View examples |
| Read dropped text | const id = event.dataTransfer.getData('application/x-task-id') | View examples |
| Complete a custom drop | event.preventDefault() | View examples |
| Clean up after dragging | source.addEventListener('dragend', () => source.classList.remove('dragging')) | View examples |
| Offer a button alternative | <button type="button" data-action="move">
Move to Done
</button> | View examples |
Forms and Interaction · 15 commands
HTML Forms Cheat Sheet
| Use | Syntax | Examples |
|---|---|---|
| Submit with POST | <form action="/submit" method="post"></form> | View examples |
| Submit with GET | <form action="/search" method="get"></form> | View examples |
| Label a control | <label for="email">Email</label> | View examples |
| Describe a control | <input aria-describedby="email-help"> | View examples |
| Collect an email | <input type="email" name="email"> | View examples |
| Collect a phone number | <input type="tel" name="phone"> | View examples |
| Enable autofill | <input name="email" autocomplete="email"> | View examples |
| Create a choice list | <select name="role"></select> | View examples |
| Add a select option | <option value="developer">Developer</option> | View examples |
| Require a value | <input name="email" required> | View examples |
| Limit text length | <input name="username" minlength="3" maxlength="20"> | View examples |
| Require a pattern | <input name="username" pattern="[A-Za-z0-9_]+"> | View examples |
| Submit the form | <button type="submit">Save profile</button> | View examples |
| Run a custom action | <button type="button">Preview</button> | View examples |
| Reset form fields | <button type="reset">Reset fields</button> | View examples |
Forms and Interaction · 14 commands
Pointer Events and Gesture Handling Cheat Sheet
| Use | Syntax | Examples |
|---|---|---|
| Start pointer input | surface.addEventListener('pointerdown', beginGesture) | View examples |
| Check the primary pointer | if (!event.isPrimary) return | View examples |
| Adapt to pointer type | const kind = event.pointerType | View examples |
| Declare handled gestures | touch-action: pan-y pinch-zoom; | View examples |
| Cancel a supported default | if (event.cancelable) event.preventDefault() | View examples |
| Capture an active pointer | surface.setPointerCapture(event.pointerId) | View examples |
| Release pointer capture | surface.releasePointerCapture(pointerId) | View examples |
| Handle lost capture | surface.addEventListener('lostpointercapture', cancelGesture) | View examples |
| Track active contacts | activePointers.set(event.pointerId, { x: event.clientX, y: event.clientY }) | View examples |
| Read normalized pressure | const pressure = event.pressure | View examples |
| Read coalesced samples | const samples = event.getCoalescedEvents?.() ?? [event] | View examples |
| Handle raw updates conditionally | surface.addEventListener('pointerrawupdate', drawSamples) | View examples |
| Handle gesture cancellation | surface.addEventListener('pointercancel', cancelGesture) | View examples |
| Remove gesture listeners | controller.abort() | View examples |



