A disabled fieldset disables most descendant form controls as one group, with a special exception for its first legend.
HTML disabled fieldset: stop editing without implying saved state
When the element earns its place
An adjustment form opens in a locked review state. Grouping the amount and reason under one disabled fieldset prevents accidental interaction while a separate button requests unlock through a real workflow. Disabled controls are generally omitted from form submission; do not expect their current values to reach the server when another section is submitted. The server must enforce the lock independently, since a client can remove the disabled attribute.
<form action="/adjustments/A-47/review" method="post">
<fieldset disabled>
<legend>Adjustment A-47: locked for review</legend>
<label for="adjustment-amount">Amount</label>
<input id="adjustment-amount" name="amount" type="number" value="47">
<label for="adjustment-reason">Reason</label>
<input id="adjustment-reason" name="reason" value="Damaged parcel">
</fieldset>
<button type="submit" name="intent" value="request_unlock">Request unlock</button>
</form>Behavior boundary
Only the enabled submitter contributes its intent here. The backend must re-read the stored adjustment and decide whether the caller may request an unlock; missing amount and reason fields are expected.
Cost and operational limits
Native disabled behavior avoids event handlers for every control. The tradeoff is discoverability and submission semantics, which require clear explanatory copy and server tests for omitted fields.
Common Mistakes
- Do not use disabled as an authorization boundary.
- Do not treat omitted controls as a request to clear stored values.
- Do not disable the unlock button inside the fieldset.
