Combobox

Release dato: 09.04.2024

Sist oppdatert: 19.06.2025

En combobox (multiselect, flervalg) kombinerer et tekstfelt med en nedtrekksliste. Den lar brukeren:

  • Søke ved å skrive inn tekst (for å filtrere alternativer)
  • Velge ett eller flere alternativer fra en forhåndsdefinert liste
  • Legge til egne verdier dersom det er tillatt (valgfritt)

Formålet med en combobox er å gjøre det enklere for brukeren å finne eller legge inn riktig verdi, spesielt når det er mange alternativer.

Live demo

Relaterte komponenter

Varianter

Comboboxen kan brukes i to forskjellige typer:

TypeBruk
EnkeltvalgBrukeren kan velge kun ett alternativ
FlervalgBrukeren kan velge flere alternativer

Når du bruker flervalg, blir valgene registrert som tags. Tagsene kan plasseres inne i, eller utenfor, feltet.

Retningslinjer for bruk

Bruk combobox når

  • brukeren har mange valg og kan velge flere enn én
  • du ønsker at brukeren skal kunne søke eller filtrere
  • brukeren skal kunne skrive inn fritekst

Unngå combobox når

  • det er færre enn 3 alternativer å velge mellom (bruk heller dropdown, checkbox eller radiobutton)
  • det er viktig at brukeren bare velger fra en fast liste
  • kun søk er nødvendig (bruk heller search input)

Skriv tydelig label og hjelpetekst

Sørg for at label (etiketten) til comboboxen er beskrivende og gir brukeren en tydelig forståelse om hva som trengs av input. Bruk både label og hjelpetekst for å forklare regler som for eksempel maks antall valg eller fritekst.

Gjør slik

Eksempe på tydelige og klare etiketter og hjelpetekster
Skriv tydelige og klare etiketter og hjelpetekster.

Unngå

Eksempel på ufullstendig og uklar etikett og hjelpetekst
Unngå ufullstendig og uklar etikett og hjelpetekst.

Beskriv mulighetene til brukeren Dersom du gir brukeren mulighet for å legge

til nye alternativer, forklar tydelig hvordan brukeren skal benytte comboboxen i hjelpeteksten.

Responsivitet

Combobox fungere godt på alle skjermstørrelser, inkludert mobil og nettbrett. Den tilpasser seg tilgjengelig plass, og både inputfelt og liste over alternativer bryter linjer der det er nødvendig.

Det er noen ting vi anbefaler at dere tester og vurderer når dere bruker combobox:

  • Pass på at tags (i flervalg) ikke bygger for mange linjer eller blir visuelt overveldende. På smale skjermer bør lange verdier trunkeres, brytes eller skjules på en ryddig måte.
  • Unngå at valgoversikten dekker for mye av skjermen. Du kan vurdere å bruke fullskjermsvisning av listen på små skjermer dersom det er mange valg.
  • Comboboxen fungerer like godt i både stående og liggende visning. Likevel anbefaler vi at dere tester både på mobil og nettbrett.

Universell utforming

Skjemaelementer skal ha en-kolonnes layout og synlig struktur

Skjemaelementer burde ha en en-kolonnes layout, og hvert element skal ha sin egen label for å beskrive bruk. Om label av en eller annen grunn ikke skal vises skal den fortsatt finnes, men bruke klassen pkt-sr-only slik at skjemaet fortsatt er brukervennlig.

Alle felt må ha logisk label

Alle tekstfelt skal ha et tilknyttet label (ledetekst/etikett). Label bør være koblet til tekstfeltet i koden slik at skjermlesere kan lese opp riktig informasjon. Komplekse skjema kan kreve mer hjelp enn bare labels.

Feilmeldinger skal være synlige og tydelige

Feilmeldinger bør være kodet som tekst og identifisere det spesifikke skjemaelementet hvor feilen oppstod. Feilmeldingen må beskrive feilen og være synlig uten at brukeren gjør noen ekstra handlinger.

Les mer om universell utforming av combobox:

Anatomi

ElementBeskrivelse
1. LabelTittel/etikett over feltet (valgfritt)
2. HjelpetekstForklaring under feltet (valgfritt)
3. InputfeltSkrivefelt med autocomplete og visning av valg
4. TagsValgte alternativer i flervalg
5. AlternativerListe over valg som kan søkes og velges fra
6. Valg alternativValgt alternativ får aktiv checkbox og vises som tag
7. HoverVisuell tilbakemelding ved hover og valgt tilstand

Implementasjon i kode

Hvordan ta komponenten i bruk?

Testing

Elements og React: Dersom du skal skrive tester med JSDOM eller liknende er det viktig at du lar komponenten bli rendret ferdig før du tester den. Dette kan gjøres ved å kjøre denne kodelinjen før testene kjøres:

await window.customElements.whenDefined("pkt-combobox");

Dersom du bruker verktøyene i punkt-testing-utils så kan dette bli gjort automatisk for deg.

Props og tokens

PropTypeBeskrivelse
namestringNavn som brukes i skjema ved innsending
idstringUnik ID for feltet
labelstringTekst som vises over feltet
placeholderstringSpesifiserer en kort hint som beskriver forventet verdi av feltet.
multiplebooleanMulighet for å velge flere valg
tagPlacementinside
outside
Plassering av valgte verdier i feltet ved flervalg
maxlengthnumberMaks antall valg dersom flervalg er aktivert
typeaheadbooleanMulighet for automatisk utfylling av feltet fra listen over valg
includeSearchbooleanMulighet for å søke etter valg inni dropdown
allowUserInputbooleanMulighet for å skrive inn egne verdier
displayValueAslabel
value
prefixAndValue
Hvordan valgt verdi vises i feltet
valuestringValgt verdi. Streng ved enkelt valg, array av strenger ved flervalg.
helptextstringHjelpetekst som vises over feltet
helptextDropdownstringHjelpetekst som vises over feltet
helptextDropdownButtonstringTekst som vises på knappen for å åpne/lukke utvidet hjelpetekst
disabledbooleanFeltet er deaktivert
hasErrorbooleanFeltet har en feil
errorMessagestringTekst som vises under feltet ved feil
requiredbooleanFeltet må fylles ut
requiredTagbooleanViser en merking som indikerer at feltet er påkrevd
requiredTextstringTekst som vises i påkrevd-merkingen
optionalTagbooleanViser en merking som indikerer at feltet er valgfritt
optionalTextstringTekst som vises i valgfritt-merkingen
tagTextstringTekst som vises i en tag ved siden av label
fullwidthbooleanSkal feltet ta opp hele bredden?
defaultOptionsarrayListe over valg som kan velges, om options sendes inn som array med objekter (denne vil ikke modifiseres ved endring innad i komponenten)
optionsarrayListe over valg som kan velges, om options sendes inn som array med objekter

Farger

ElementCSS Variabel
Background
Text
Border
Active/chosen element
Tags

*Du kan bruke alle tilgjengelige tag-farger. Se oversikt over alle fargevarianter i tag-komponenten for mer informasjon.