Missing name, role, or state makes a control unusable
Aliases: name role state · NRV · accessible name role value
What it is
A typical reader utterance is “Notifications, button, collapsed.” Name answers which one, role answers what kind, state (and value) answers how it is now. Drop any of the three and the control is unusable for AT users: they cannot find it, do not know how to operate it, or operate it without knowing the result.
Why it happens
Assistive technology packs an object into three slots and then speaks them. Name is the retrieval key — without it, a type list is a row of “button” and nothing can be called. Role is the operation script — without it, the name is static text and nobody tries to activate. State is the current condition — without it, a switch can be pressed with no knowledge of on or off, which is operating a sealed box.
The three slots answer three different questions and cannot stand in for each other. A long name that hints “this is a switch” does not supply a role; a clear role still cannot say which one it is. Missing a slot is not a milder experience; it is the object dropping out of the operable set.
Studying it
On the same control, drop name, drop role, and drop state in turn. Ask reader users to find, operate, and confirm the result.
Independent variables: presence or absence of each slot. Dependent variables: whether the control can be named in a list, whether the first operation follows the right script, whether the user can report the condition afterwards.
Use widgets whose state changes — switches, disclosure buttons, tabs. A static link will not probe the state slot. Compare the actual sentence in NVDA, JAWS, and VoiceOver to confirm absence is “not spoken,” not “spoken but unnoticed.”
Where it stops holding
Display-only text never had a role or state; missing those is not a defect. When decoration is correctly hidden, all three slots may be empty. Some platforms expose value and state in one field — what must not be missing is the “current condition” slot, whatever the field is called. Where the name is computed from, and whether it matches visible text, is a later calculation question; here the only question is whether the three slots are occupied.
Applying it
- Every operable object needs a name that can be called, a role that matches behavior, and state that changes when the object is operated.
- Conditions such as on/off, selected, expanded, and disabled must be spoken, not only restyled.
- How to check: listen to one full utterance and mark the three slots. Leave any one empty, then ask a reader user to find, press, and confirm from that sentence alone — the empty slot decides which step fails.