← Hub · Open the note

Loading states — demo — BEFORE/AFTER

Goal: loading indicators that don’t confuse screen readers, don’t allow double-submits, and don’t trap users in “spinner forever”.

BEFORESpinner only (not announced, allows repeated clicks)

Problems: the spinner is visual-only, the button stays active, and users can trigger overlapping loads with no clear completion message.

Example “Recommended items”

Try: click “Load recommendations” twice quickly. Notice how the UI doesn’t explain what happened.

AFTERBusy semantics + polite status + disable controls

Pattern: mark the region aria-busy, disable the triggering control to prevent double submits, and announce start/complete via a status region.

Example “Recommended items”

Try: click once. Notice the button disables and you get a “Loaded …” announcement.

Quick checklist