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.

Test komponenten

Relaterte komponenter

Varianter

Comboboxen kan brukes i to forskjellige typer:

TypeBruk
EnkeltvalgBrukeren kan velge kun ett alternativ
FlervalgBrukeren kan velge flere alternativer
Eksempel på enkeltvalg comboboxEksempel flervalg combobox

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

Eksempel på combobox.Eksempel combobox med valgte verdier som tags utenfor feltet

Størrelser

Comboboxen kan brukes i tre ulike størrelser:

StørrelserBruk
Medium (default)Standard, og skal brukes som hovedregel
SmallFor trange flater, som tabeller og kompakte skjema
XSmallFor ekstra trange flater, som kompakte tabeller og informasjonstette fagsystemer
Eksempel på combobox i forskjellige størrelser

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 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

Skriv tydelige og klare etiketter og hjelpetekster.

Unngå

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.

Eksempel på combobox med inputfelt med et plusstegn, der brukeren kan legge til nye alternativer.Eksempel combobox uten mulighet for å legge til nye alternativer.

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.
Combobox på mobil

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
Combobox anatomi.

Implementasjon i kode

Hvordan ta komponenten i bruk?

Testing

Elements: 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");

Egenskaper

PktCombobox

Props

Prop:
name?
Type:
string
Beskrivelse:
Navn som brukes i skjema ved innsending
Prop:
form?
Type:
string
Beskrivelse:
ID-en til skjemaet feltet hører til, når feltet ligger utenfor skjemaet
Prop:
id?
Type:
string
Beskrivelse:
Unik ID for feltet
Prop:
ariaDescribedby?
aria-describedby?
Type:
string
Beskrivelse:
Spesifiserer ID-en til elementet som beskriver feltet.
Prop:
label?
Type:
string
Beskrivelse:
Tekst som vises over feltet
Prop:
placeholder?
Type:
string
Beskrivelse:
Spesifiserer en kort hint som beskriver forventet verdi av feltet.
Prop:
multiple?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Mulighet for å velge flere valg
Prop:
tagPlacement?
tag-placement?
Type:
"inside" | "outside"
Beskrivelse:
Plassering av valgte verdier i feltet ved flervalg
Prop:
maxlength?
Type:
number
Beskrivelse:
Maks antall valg dersom flervalg er aktivert
Prop:
typeahead?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Mulighet for automatisk utfylling av feltet fra listen over valg
Prop:
includeSearch?
include-search?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Mulighet for å søke etter valg inni dropdown
Prop:
allowUserInput?
allow-user-input?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Mulighet for å skrive inn egne verdier
Prop:
searchPlaceholder?
search-placeholder?
Type:
string
Beskrivelse:
Plassholdertekst for søkefeltet i dropdown
Prop:
displayValueAs?
display-value-as?
Type:
"label" | "value" | "prefixAndValue"
Standardverdi:
"label"
Beskrivelse:
Hvordan valgt verdi vises i feltet
Prop:
inputSize?
input-size?
Type:
"xsmall" | "small" | "medium"
Standardverdi:
"medium"
Beskrivelse:
Visuell størrelse via input-wrapper. small: kompakt wrapper og felt (42px). xsmall: samme wrapper som small, felt 36px.
Prop:
value?
Type:
string | string[]
Beskrivelse:
Valgt verdi. Streng ved enkelt valg, array av strenger ved flervalg.
Prop:
helptext?
Type:
string
Beskrivelse:
Hjelpetekst som vises over feltet
Prop:
helptextDropdown?
helptextdropdown?
Type:
string
Beskrivelse:
Hjelpetekst som vises i en lukket boks man kan åpne
Prop:
helptextDropdownButton?
helptextdropdownbutton?
Type:
string
Standardverdi:
"Les mer"
Beskrivelse:
Tekst som vises på knappen for å åpne/lukke utvidet hjelpetekst
Prop:
disabled?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Feltet er deaktivert
Prop:
hasError?
haserror?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Feltet har en feil
Prop:
errorMessage?
errormessage?
Type:
string
Beskrivelse:
Tekst som vises under feltet ved feil
Prop:
required?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Feltet må fylles ut
Prop:
requiredTag?
requiredtag?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Viser en merking som indikerer at feltet er påkrevd
Prop:
requiredText?
requiredtext?
Status:
DeprecatedBruk strings={{ forms: { required: '…' } }} eller setPktStrings().
Type:
string
Beskrivelse:
Tekst som vises i påkrevd-merkingen
Prop:
optionalTag?
optionaltag?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Viser en merking som indikerer at feltet er valgfritt
Prop:
optionalText?
optionaltext?
Status:
DeprecatedBruk strings={{ forms: { optional: '…' } }} eller setPktStrings().
Type:
string
Beskrivelse:
Tekst som vises i valgfritt-merkingen
Prop:
tagText?
tagtext?
Type:
string
Beskrivelse:
Tekst som vises i en tag ved siden av label
Prop:
fullwidth?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Skal feltet ta opp hele bredden?
Prop:
defaultOptions?
default-options?
Type:
IPktComboboxOption[]
Standardverdi:
[]
Beskrivelse:
Liste over valg som kan velges, om options sendes inn som array med objekter (denne vil ikke modifiseres ved endring innad i komponenten)
Prop:
options?
Type:
IPktComboboxOption[]
Standardverdi:
[]
Beskrivelse:
Liste over valg som kan velges, om options sendes inn som array med objekter
Prop:
inline?
Type:
boolean
Standardverdi:
false
Beskrivelse:
Angir om feltet skal flyte med teksten
Prop:
useWrapper?
usewrapper?
Type:
boolean
Standardverdi:
true
Beskrivelse:
Indikerer om skjemaelementet skal bruke en wrapper
Prop:
hasFieldset?
hasfieldset?
Type:
boolean
Beskrivelse:
Bruk fieldset og legend i stedet for label. Utledes automatisk når feltet ikke har en input.
Prop:
counter?
Type:
boolean
Beskrivelse:
Viser teller under feltet. Slås på av seg selv når det finnes en grense å telle mot; sett til false for å skru den av.
Prop:
defaultValue?
defaultvalue?
Type:
string | string[]
Beskrivelse:
Verdien feltet får ved oppstart og ved nullstilling av skjemaet

Events

Event:
change
Type:
Event
Beskrivelse:
Returnerer valgt verdi som streng. Ved flervalg returneres kommaseparerte verdier.
Event:
value-change
Type:
CustomEvent
Beskrivelse:
Returnerer valgt verdi. Ved enkeltvalg en streng, ved flervalg en string[].
Event:
search
Type:
CustomEvent
Beskrivelse:
Returnerer søketeksten som streng i event.detail når brukeren skriver i søkefeltet
Event:
toggleHelpText
Type:
CustomEvent
Beskrivelse:
Returnerer event.detail { isOpen: true } eller event.detail { isOpen: false } når hjelpeteksten åpnes eller lukkes

IPktComboboxOption

Prop:
value
Type:
string
Beskrivelse:
Verdi som sendes ved valg
Prop:
label?
Type:
string
Beskrivelse:
Tekst som vises for valget
Prop:
prefix?
Type:
string
Beskrivelse:
Tekst som vises før valget
Prop:
description?
Type:
string
Beskrivelse:
Beskrivelse av valget
Prop:
disabled?
Type:
boolean
Beskrivelse:
Valget er deaktivert
Prop:
selected?
Type:
boolean
Beskrivelse:
Valget er valgt
Prop:
tagSkinColor?
Type:
"blue" | "blue-dark" | "blue-light" | "green" | "red" | "yellow" | "beige" | "gray" | "grey"
Beskrivelse:
Farge på tag