Hopp til hovedinnhold
Meny

lmfaole.party / designsystem / komponenter / Nedtrekksliste

  • Forside
  • Turer
  • Økonomi
  • Slides
  • <lm-select-field> – Nedtrekksliste / Select field

    Om komponenten

    Formål

    Nedtrekksliste med samme etikett-/hjelpetekst-/feilmeldingsoppsett som resten av skjemafelt-familien. Valgene settes enten som en kort JSON-array i options-attributtet for statiske lister, eller som en JS-array via options-propertyen for dynamiske/hentede lister (samme mønster som <lm-data-table> sin kolonner-property).

    Egner seg for

    • Et fast, kjent sett med gjensidig utelukkende valg (enhet, valuta, frekvens, status) - både statiske og dynamisk hentede.
    • Grupperte valg via {gruppe, valg}-formen, som gir <optgroup>.

    Egner seg ikke for

    • Søk-med-forslag mot et stort eller åpent datasett - bruk et <input list>/<datalist>-par, se kobleDatalistSok().
    • Et lite, alltid synlig sett med 2-4 valg der alle alternativene bør være synlige samtidig - bruk <lm-radio-group-field>.

    Bruk

    <script type="module" src="/designsystem/komponenter/skjema/select-field/select-field.js"></script>
    
    <!-- Statisk liste - én linje -->
    <lm-select-field name="varighetEnhet" label="Enhet" options='[{"value":"timer","label":"Timer"},{"value":"dager","label":"Dager","selected":true}]'></lm-select-field>
    // Dynamisk liste hentet fra et API/oppslag
    const felt = document.querySelector("lm-select-field[name=tidssone]");
    felt.options = tidssoner.map((tz) => ({value: tz.id, label: tz.visningsnavn}));

    Prøv selv

    Rediger koden under - resultatet oppdateres live.

    Attributter

    Attributt Type Standard Beskrivelse
    labelstringAttributt/property. Synlig etikett-tekst.
    namestringAttributt. Skjemafelt-navn - komponenten er form-associated og deltar i FormData under dette navnet.
    optionsstring | Array<{value, label, disabled?, selected?} | {gruppe, valg}>Attributt (JSON-streng, for statiske valg i én linje) eller property (JS-array, for dynamiske/hentede lister). Elementer kan også være {gruppe: "...", valg: [...]} for <optgroup>.
    valuestringAttributt/property. Valgt verdi.
    requiredbooleanfalseAttributt/property. Gjør et reelt valg obligatorisk og legger til en stjerne i etiketten.
    disabledbooleanfalseAttributt/property. Deaktiverer feltet (arves også automatisk fra en <fieldset disabled>).
    helpstringAttributt. Kort hjelpetekst vist under feltet, koblet via aria-describedby.

    Parts

    Part Beskrivelse
    etikettDet omsluttende <label>-elementet.
    etikett-tekst<span>-en med selve etikett-teksten.
    feltDet interne <select>-elementet.
    hjelpetekst<small>-elementet med hjelpeteksten.
    feilmelding<small role="alert">-elementet med valideringsmeldingen.

    Styling med ::part()

    Hver part over kan restyles direkte fra et vanlig, ytre stilark - uten å måtte endre selve komponenten eller duplisere den:

    lm-select-field::part(etikett) {
        /* egne stiler for "Det omsluttende `<label>`-elementet." */
    }
    
    lm-select-field::part(etikett-tekst) {
        /* egne stiler for "`<span>`-en med selve etikett-teksten." */
    }
    
    lm-select-field::part(felt) {
        /* egne stiler for "Det interne `<select>`-elementet." */
    }
    
    lm-select-field::part(hjelpetekst) {
        /* egne stiler for "`<small>`-elementet med hjelpeteksten." */
    }
    
    lm-select-field::part(feilmelding) {
        /* egne stiler for "`<small role="alert">`-elementet med valideringsmeldingen." */
    }

    Metoder

    Metode Parametre Returverdi Beskrivelse
    checkValidity()-Videresender til den interne ElementInternals.checkValidity().
    reportValidity()-Videresender til den interne ElementInternals.reportValidity().

    Tilgjengelighet

    Samme etikett-/hjelpetekst-/feilmeldingsoppsett som <lm-text-field>. Selve <select>-elementet beholder all native tastatur- og skjermleserstøtte uendret - komponenten setter ingen egne ARIA-roller på det.

    • Samme <label>/aria-describedby-oppsett som <lm-text-field>.
    • Selve <select>-elementet beholder all native tastatur- og skjermleserstøtte uendret.

    Detaljer

    • Er form-associated og deltar i FormData under sitt name-attributt.
    • options kan settes som en JSON-streng (attributt, statisk) eller som en ekte JS-array (property, dynamisk) - begge bygger de samme interne <option>/<optgroup>-elementene.
    • Tekstinnhold escapes med escapeHtml før innsetting, slik at API-hentede etiketter aldri kan injisere markup.
    • Nedtrekkslisten (::picker(select)) og hvert valg (option) er stylet med Customizable Select - bakgrunn, radius, skygge og valgt/hover-farge kommer fra de samme tokenene som resten av designsystemet, ikke nettleserens standard-utseende.

    Referanser

    Se også:

    Brukes av:

    • Ingen ennå - ny komponent.

    Avhengigheter: designsystem/komponenter/skjema/skjema-felt-delt.css, designsystem/komponenter/skjema/skjema-felt-delt.js, designsystem/funksjoner/sikkerhet/escape-html/