aria-haspopup
Informerar hjälpmedelsteknik om att aktivering av kontrollen öppnar ett popup-element, och vilken typ. Accepterar "menu", "listbox", "tree", "grid", "dialog" eller "true" / "false". Kombinera med aria-expanded så AT också kan meddela om popupen är öppen.
När ska det användas
På varje kontroll som öppnar ett tillfälligt överlager — en knapp som utlöser en meny, ett inmatningsfält som öppnar en listbox i en combobox, en ikonknapp som visar en dialog. Attributet låter skärmläsaren meddela något i stil med “Filter, menyknapp” eller “Sök, har popup”, så att användaren vet att kontrollen visar mer gränssnitt i stället för att navigera eller skicka ett formulär.
Utelämna attributet på kontroller som bara växlar en sektion på samma sida — ett disclosure-widget ska använda aria-expanded på egen hand; det synliggjorda innehållet är en del av sidan, inte ett popup-element.
Hur det fungerar
Accepterar en fast uppsättning tokenvärden:
"menu"— öppnar ettrole="menu"(det vanligaste fallet för menyknappar)."listbox"— öppnar ettrole="listbox", används i anpassade comboboxar."tree"— öppnar ettrole="tree"."grid"— öppnar ettrole="grid"(datumväljare ofta)."dialog"— öppnar ettrole="dialog"ellerrole="alertdialog"."true"— motsvarar"menu"av bakåtkompatibilitetsskäl; föredra ett av de specifika värdena."false"— explicit “har inget popup-element”; standardvärdet.
Kombinera aria-haspopup med aria-expanded="true|false" så att AT också kan meddela om popupen är öppen. De två attributen fyller olika funktioner — haspopup säger “det finns ett popup-element”, expanded säger “och det är för närvarande synligt”.
Vanliga fel
- Att använda
aria-haspopup="true"på en knapp som öppnar en anpassad datumväljare (som egentligen är ett grid eller en dialog) — AT meddelar “menyknapp” och användare trycker nedåtpilen i väntan på menyposter. - Att glömma
aria-expanded. AT säger “har popup” men meddelar aldrig det öppna/stängda tillståndet, så användare kan inte avgöra om deras klick hade någon effekt. - Att lägga till
aria-haspopuppå en kontroll som inte faktiskt öppnar ett popup-element. Vilseleder användaren, som hör möjligheten och inte hittar något. - Att använda
aria-haspopuppå en länk som navigerar till en ny sida. Det är inte ett popup-element; låt länken vara en länk. - Att glömma att flytta fokus in i ett
dialog-popup eller ned till den förstamenuitemi enmenu. Attributet namnger popup-typen men hanterar inte fokus. - Att sätta
aria-haspopup="dialog"utan att sättarole="dialog"på popup-elementet. De utlovade semantiken uteblir.
Exempel
<!-- Menu button -->
<button
type="button"
id="filter-btn"
aria-haspopup="menu"
aria-expanded="false"
aria-controls="filter-menu"
>
Filter
</button>
<ul id="filter-menu" role="menu" hidden>
<li role="menuitem">All</li>
<li role="menuitem">Unread</li>
<li role="menuitem">Flagged</li>
</ul>