Hopp til hovedinnhold
Meny

lmfaole.party / designsystem / komponenter / Listeboks

  • Forside
  • Turer
  • Økonomi
  • Slides
  • <lm-listbox> – Listeboks / Listbox

    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, se kobleDatalistSok(), 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
    multippelbooleanfalseAttributt/property. Tillater flervalg (klikk/mellomrom veksler valgt tilstand per element) i stedet for kun ett valg om gangen.

    Events

    Event Type Beskrivelse
    listbox:endringCustomEventDispatches 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
    listeWrapperen 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"; i multippel-modus settes også aria-multiselectable="true".
    • Hvert valg trenger role="option" (satt av forbrukeren) og får aria-selected/roving tabindex styrt 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å:

    Avhengigheter: Ingen