Recent chats
ASKGEEZ Q&A GUIDETechnology & devices

How can I announce loading and completion states for a website action?

Quick answer

Give each action a clear starting state, an accurate in-progress message, and an outcome message for success or failure. Update the visible interface when the state changes; do not show a percentage unless you can measure meaningful progress. For dynamic announcements, prepare a status or live region before changing its text, keep routine updates non-interruptive, and avoid moving focus just to announce completion. Clear or replace stale messages when the next action begins. [S2] [S3]

LET’S WORK THROUGH IT

The question, the details, the next step.

Question

How should I decide what the loading and completion messages say? I have a button that exports a report, and the work can take a moment.

Geez

Treat the messages as a short account of the action’s real state, not as decoration. Before work starts, the button can say “Export report.” Once the export has actually begun, show a clear in-progress message such as “Preparing your report…” and make it apparent which report is being prepared if the page contains several.

When the result is ready, say what happened: “Report downloaded” or “Your report is ready to download,” depending on the behavior. If the action fails, state that it did not complete and give a useful next step when you know one, for example, “Report couldn’t be prepared. Try again.” Avoid saying “Done” if the result has not yet been delivered or made available.

Use a percentage only when the application has a meaningful measurement of progress. If it cannot measure progress, a concise activity message is more honest than a changing number that merely looks precise.

Follow-up question

How do I make those changes available to people using a screen reader without interrupting them?

Geez

For routine updates such as “Preparing your report…” or “Report ready,” use a status region: it is intended for advisory information, has polite live behavior by default, and should not take focus away from the user’s current activity. [S2] A live region can announce dynamic changes without moving focus; polite announcements generally wait for a suitable opportunity, while assertive announcements can interrupt and are best reserved for cases needing immediate attention. [S3]

Make sure the live region is already present before its text changes. [S3] If several pieces of a region are being updated together, aria-busy="true" can signal that updates are underway; set it to false when they are complete so assistive technology can receive the finished update rather than incomplete intermediate content. [S1] That attribute does not tell users a percentage or say whether the action succeeded or failed, so provide accurate outcome text separately. [S1]

In this example, the status text changes as the action moves through its states; the quoted messages are illustrative, not a prescribed workflow:

  1. Start: “Preparing your report…”
  2. Success: “Report ready to download.”
  3. Failure: “Report couldn’t be prepared. Try again.”

Keep the message concise and avoid announcing every internal step if those steps do not help the user.

Follow-up question

What should the interface do while the action is running, and what if the user tries it again?

Geez

Show the in-progress state only after the action has actually started. Make the affected control’s state understandable, and prevent accidental duplicate submissions if that fits the action; if you disable a control, keep the in-progress message visible so the user still knows what is happening. When the action ends, restore or update the control according to the real result.

For a retry, begin a new state sequence: replace an old success or failure message with the current in-progress message, then announce the new outcome. Do not leave a previous “Report ready” beside a failed retry, where it could be mistaken for the latest result. If the action’s state is uncertain, say that it is still being checked rather than claiming success or failure.

A useful design check is to ask: “If someone sees only this message, can they tell which action it describes and whether it is still underway?” If not, add the relevant item or action name, not implementation details.

Follow-up question

Can you give me a reusable checklist for reviewing a loading state before release?

Geez

Review the full path from activation to outcome, including failure and retry—not just the spinner. Confirm that visible wording and announcements stay in sync, that the message reflects the actual result, and that routine updates do not unnecessarily interrupt or move the user. The guidance here explains announcement behavior and update signaling; it does not establish a particular product workflow, progress measure, or wording for your action, so check those choices against what your interface actually does.

A practical checklist

  • Name the action or item in the message when context might be unclear.

  • Show an in-progress message only after work begins; do not invent a progress percentage.

  • Write separate, accurate messages for success and failure, with a next step only when one is known.

  • Prepare the live region before updating it; use a status region for routine advisory updates without moving focus. [S2] [S3]

  • If a live region is being updated in several parts, consider marking it busy during the update and clearing that state when complete. [S1]

  • On retry, replace stale outcome text and announce the latest action’s state.

A few more useful answers

Does aria-busy announce that an action is progressing?

No. It signals that an element is being modified and can help defer announcements of incomplete updates. It does not provide a progress percentage or report whether the action succeeded or failed. [S1]

Should every completion message use an assertive announcement?

No. Routine completion information generally suits a polite status update. Assertive live announcements can interrupt the user and should be reserved for situations where immediate attention is essential. [S2] [S3]

Should announcing a result move focus to the message?

Usually not for a routine status update. A status region is advisory and should not move focus; live regions can make changes perceptible without doing so. [S2] [S3]

Sources

References used for this guide.

  1. [S1] ARIA: aria-busy attribute — MDN Accessibility
    developer.mozilla.org · Checked
  2. [S2] ARIA: status role — MDN Accessibility
    developer.mozilla.org · Checked
  3. [S3] ARIA: aria-live attribute — MDN Accessibility
    developer.mozilla.org · Checked

YOUR QUESTION. YOUR DETAILS.

Let’s work through your situation.

Get a tailored answer or help with your next task. Starts at $1, with a quote before you pay.

Ask your own question
← Back to Geez at Work