Om komponenten
Formål
En rikt stylet liste hvor brukeren velger ett eller flere elementer - f.eks. flervalg av kategorier i et filterpanel, der native <select multiple> sitt utseende er for begrenset. Implementerer ARIA APG sitt Listbox-mønster fullt ut: role="listbox"/"option", roving tabindex, piltast-/Home-/End-navigasjon og mellomromsvalg.
Egner seg for
- Flervalg med rik visuell styling per valg (ikoner, farger, flerlinjers innhold) som
<select multiple>ikke kan gi. - Enkeltvalg der en tilpasset, alltid synlig liste (ikke en nedtrekksliste) er ønskelig.
Egner seg ikke for
- Enkle tekstvalg uten behov for egen styling - bruk native
<select>/<select multiple>fremfor å legge til unødvendig JS. - Et enkeltvalg i en nedtrekksliste (popup) med rik styling per valg (ikoner, flerlinjers innhold) - bruk
<lm-select-field>, som siden 2026 opter inn i Customizable Select (appearance: base-select) og allerede stylet med de samme tokenene, helt uten egen JS. - Søkbare nedtrekksforslag koblet til et tekstfelt - bruk et
<input list>/<datalist>-par, sekobleDatalistSok(), i stedet.
Bruk
<script type="module" src="/designsystem/komponenter/skjema/listbox/listbox.js"></script>
<lm-listbox multippel aria-label="Kategorier">
<div role="option" data-verdi="mat">🍽️ Mat</div>
<div role="option" data-verdi="transport">🚗 Transport</div>
<div role="option" data-verdi="bolig">🏠 Bolig</div>
</lm-listbox>
Prøv selv
Rediger koden under - resultatet oppdateres live.
Attributter
| Attributt | Type | Standard | Beskrivelse |
|---|---|---|---|
multippel | boolean | false | Attributt/property. Tillater flervalg (klikk/mellomrom veksler valgt tilstand per element) i stedet for kun ett valg om gangen. |
Events
| Event | Type | Beskrivelse |
|---|---|---|
listbox:endring | CustomEvent | Dispatches når valget endres. detail.verdi er den (enkelt-modus) valgte verdien, detail.verdier er alltid en array av alle valgte verdier. |
Slots
| Slot | Beskrivelse |
|---|---|
| (standard) | Elementer med role="option" og data-verdi="..." - selve valgene. |
Parts
| Part | Beskrivelse |
|---|---|
liste | Wrapperen med role="listbox". |
Styling med ::part()
Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:
lm-listbox::part(liste) {
/* egne stiler for "Wrapperen med `role="listbox"`." */
}
Tilgjengelighet
Wrapperen har role="listbox" (og aria-multiselectable i multippel-modus); hvert valg trenger role="option" satt av forbrukeren. Roving tabindex holder kun ett valg i tab-rekkefølgen om gangen; piltaster flytter fokus, mellomrom/Enter/klikk velger.
- Wrapperen har
role="listbox"; imultippel-modus settes ogsåaria-multiselectable="true". - Hvert valg trenger
role="option"(satt av forbrukeren) og fåraria-selected/rovingtabindexstyrt av komponenten. - Piltaster (opp/ned) flytter fokus syklisk; Home/End hopper til første/siste; mellomrom/Enter/klikk veksler eller setter valgt tilstand.
Detaljer
- Verdien leses fra
data-verdi-attributtet på hvert valg-element, ikke fra tekstinnholdet - slik kan visningstekst og verdi skille seg (f.eks. et ikon + label vs. en ren id). verdi/verdier-propertyene er skrivebeskyttet - selve valget skjer via klikk/tastatur, ikke ved å sette propertyen direkte.
Referanser
Se også:
../../../funksjoner/dom/koble-datalist-sok/index.html - brukes i stedet når listen skal kobles til et søkbart tekstfelt.../select-field/index.html - brukes i stedet for et enkeltvalg i en nedtrekksliste - stylet med Customizable Select siden 2026, ingen egen komponent nødvendig lenger for det tilfellet.
Avhengigheter: Ingen