Estimated reading time : 2 min · Published October 7, 2026
Describe the outcome in the label
The W3C link and button patterns distinguish destination and action. “View prices” can open a page; “Send enquiry” submits a form. Retain that distinction even when controls look alike.
Use a verb and object where they clarify consequences. Repeated “Learn more” links need identifiable context. Deletion or payment should name what is affected. An icon-only control needs an accessible name consistent with its visible purpose.
Choose waiting and unavailable states
Inside a form, the HTML button element needs an appropriate type: a secondary action should not accidentally submit. Native disabled prevents activation; aria-disabled announces a state but does not block the action itself.
Explain why an important action is unavailable and how to enable it. An unexplained disabled control can leave people searching for an invisible error. During submission, keep a clear waiting state and recovery from failure; do not remove all explanation when activation is blocked.
Prevent repeated operations at the right layer
Blocking a button after a click can reduce repeated activation, but does not protect against another request or browser history. The service needs repetition handling appropriate to the consequence. Use test data and inspect the recorded outcome.
Specify what cancellation cancels: a local edit, pending request or accepted operation. If saving finishes despite closing the window, its outcome must remain findable. Avoid labels implying a guarantee the system cannot deliver.
Example: an enquiry with an attachment
Educational example: Add document opens file selection without submitting; Send enquiry performs submission. After an error, the button becomes usable and fields remain. A second test repeats a test request and checks that one receipt does not mask two created cases.
Reference documents
Content updated on October 7, 2026
