09/05/2022
- Introduktion til Multivalgs Dropdowns med Tjekbokse
- Hvad er Tjekbokse?
- Dropdowns med Tjekbokse: Fordele og Ulemper
- Implementering med Bootstrap 5
- Generel Implementering uden Rammeværk (Eksempel med ren HTML/CSS/JS)
- Tjekbokse vs. Andre Inputfelter
- Bedste Praksis for Tjekboks-brugervenlighed
- Ofte Stillede Spørgsmål
Introduktion til Multivalgs Dropdowns med Tjekbokse
I moderne webdesign er brugerinteraktion og fleksibilitet afgørende. En af de mest almindelige udfordringer er at give brugerne mulighed for at vælge flere elementer fra en liste uden at overvælde brugerfladen. Traditionelle dropdown-menuer tillader kun ét valg ad gangen, hvilket kan være begrænsende. Løsningen? At integrere tjekbokse direkte i dropdown-menuer. Dette giver brugerne friheden til at vælge en eller flere muligheder, hvilket forbedrer både funktionalitet og brugervenlighed. Denne artikel vil udforske, hvordan man opnår denne funktionalitet, med fokus på populære rammeværk som Bootstrap og ved hjælp af ren JavaScript.

Hvad er Tjekbokse?
En tjekboks er et brugergrænsefladeelement, der giver brugeren mulighed for at vælge mellem to tilstande: markeret (checked) eller umarkeret (unchecked). I visse avancerede scenarier kan en tjekboks også have en tredje, såkaldt "indetermineret" tilstand, der indikerer, at nogle, men ikke alle, underordnede elementer er valgt. Tjekbokse er ideelle, når brugere skal kunne vælge et vilkårligt antal elementer fra en liste – nul, et, eller alle. De kan bruges enkeltvist (standalone), i en liste af tjekbokse, eller i mere komplekse, indlejrede strukturer.
Forskellige Anvendelser af Tjekbokse
- Standalone Tjekboks: Bruges ofte til at acceptere vilkår og betingelser eller til at tilmelde sig notifikationer. Kræver typisk en tydelig markering.
- Tjekboksliste: Den mest almindelige form, hvor hver tjekboks fungerer uafhængigt. Perfekt til at vælge ingredienser, filtre eller præferencer.
- Indlejrede Tjekboks Lister: En hierarkisk struktur med en overordnet tjekboks og underliggende tjekbokse. Den overordnede kan markere eller afmarkere alle underliggende, og den viser en "indetermineret" tilstand, hvis kun nogle af underliggende er valgt. Nyttigt til f.eks. at vælge passagerer til check-in.
Dropdowns med Tjekbokse: Fordele og Ulemper
Integrationen af tjekbokse i dropdown-menuer tilbyder flere klare fordele:
- Pladsbesparelse: Sammenlignet med at vise alle valgmuligheder permanent, holder en dropdown-menu brugerfladen ryddelig.
- Fleksibilitet: Giver brugerne mulighed for at vælge flere elementer, hvilket er essentielt for mange applikationer.
- Forbedret Brugeroplevelse: Eliminerer behovet for at holde Ctrl-tasten nede for at foretage flere valg, som det er standard i mange native dropdowns.
Der er dog også potentielle ulemper:
- Kompleksitet i Implementering: Kræver typisk JavaScript for at håndtere valgene og opdatere visningen.
- Tilgængelighed: Man skal være opmærksom på at sikre, at løsningen er tilgængelig for alle brugere, især dem der bruger skærmlæsere.
- Ydeevne: Meget store lister kan potentielt påvirke ydeevnen, hvis de ikke håndteres korrekt.
Implementering med Bootstrap 5
Bootstrap 5 tilbyder en elegant og responsiv måde at skabe multivalgs dropdowns med tjekbokse på. Da Bootstrap bygger på Popper.js for dynamisk positionering, er det en naturlig pasform for denne type funktionalitet. Her er to primære metoder:
Metode 1: Brug af Bootstraps Custom Dropdown Plugin (med JavaScript)
Denne metode involverer at placere tjekbokse direkte inden i dropdown-menuen. Vi bruger derefter JavaScript til at lytte efter ændringer i tjekboksene og opdatere den tekst, der vises på dropdown-knappen for at reflektere de valgte elementer. Dette kræver ingen yderligere plugins, kun grundlæggende DOM-manipulation.
HTML Struktur:
Vi definerer en standard Bootstrap dropdown-struktur, men inden i .dropdown-menu indsætter vi <li> elementer, der hver indeholder en <label> med en <input type="checkbox"> og den tilhørende tekst.
<div class="dropdown"> <button class="btn btn-success dropdown-toggle" type="button" id="multiSelectDropdown" data-bs-toggle="dropdown" aria-expanded="false"> Vælg </button> <ul class="dropdown-menu" aria-labelledby="multiSelectDropdown"> <li><label><input type="checkbox" value="Java"> Java</label></li> <li><label><input type="checkbox" value="C++"> C++</label></li> <li><label><input type="checkbox" value="Python"> Python</label></li> </ul> </div>JavaScript Logik:
Vi definerer en funktion, der kører, hver gang en tjekboks' tilstand ændres. Denne funktion indsamler værdierne af alle markerede tjekbokse og opdaterer knappens tekst. Vi tilføjer også event listeners til alle tjekbokse inden i dropdown-menuen.

const chBoxes = document.querySelectorAll('.dropdown-menu input[type="checkbox"]'); const dpBtn = document.getElementById('multiSelectDropdown'); let mySelectedListItems = []; function handleCB() { mySelectedListItems = []; let mySelectedListItemsText = ''; chBoxes.forEach((checkbox) => { if (checkbox.checked) { mySelectedListItems.push(checkbox.value); mySelectedListItemsText += checkbox.value + ', '; } }); dpBtn.innerText = mySelectedListItems.length > 0 ? mySelectedListItemsText.slice(0, -2): 'Vælg'; } chBoxes.forEach((checkbox) => { checkbox.addEventListener('change', handleCB); });Metode 2: Brug af Custom JavaScript Event Handlers
Denne metode ligner den første, men fokuserer på at tilføje en enkelt event listener til selve dropdown-menuen for at fange ændringsbegivenheder fra de indeholdte tjekbokse. Dette kan være en mere effektiv tilgang, især for længere lister.
HTML Struktur:
HTML-strukturen er identisk med Metode 1.
JavaScript Logik:
Her tilføjer vi en event listener til .dropdown-menu. Når en change-begivenhed opstår, tjekker vi, om hændelseskilden er en tjekboks. Hvis den er, opdaterer vi en array med de valgte elementer og justerer knappens tekst derefter.
const dropdownButton = document.getElementById('multiSelectDropdown'); const dropdownMenu = document.querySelector('.dropdown-menu'); let mySelectedItems = []; function handleCB(event) { const checkbox = event.target; if (checkbox.type === 'checkbox') { if (checkbox.checked) { mySelectedItems.push(checkbox.value); } else { mySelectedItems = mySelectedItems.filter((item) => item !== checkbox.value); } dropdownButton.innerText = mySelectedItems.length > 0 ? mySelectedItems.join(', '): 'Vælg elementer'; } } dropdownMenu.addEventListener('change', handleCB);Generel Implementering uden Rammeværk (Eksempel med ren HTML/CSS/JS)
Hvis du ikke bruger Bootstrap, eller ønsker en mere tilpasset løsning, kan du opnå den samme funktionalitet med ren HTML, CSS og JavaScript. Dette giver fuld kontrol over udseendet og adfærden.

HTML Struktur:
Vi bruger en wrapper-div til at positionere dropdown-menuen og en knap, der fungerer som trigger.
<div class="formselect-wrapper formselect-wrapper--multiselect"> <div class="formselect formselect--multiselect" required>Vælg sundhedsforsikring </div> <i class="arrow"></i> <div class="formselect-dropdown"> <label for="insurance1" class="formlabel--multiselect"> <input name="insurances[]" type="checkbox" id="insurance1" value="1" class="formcheckbox" /> Første Forsikring </label> <label for="insurance2" class="formlabel--multiselect"> <input name="insurances[]" type="checkbox" id="insurance2" value="2" class="formcheckbox" /> Anden Forsikring </label> <!-- Flere muligheder her --> </div> </div>CSS Styling:
CSS bruges til at style dropdown-knappen, selve menuen og tjekboks-labels. Vi bruger display: none; til at skjule dropdown-menuen som standard og viser den ved interaktion.
.formlabel--multiselect { display: block; padding: 0.2em; background-color: #e0f4ff; color: #888; } .formlabel--multiselect:hover { background-color: #ddd; color: #555; } .formselect-dropdown { display: none; / Skjult som standard / position: absolute; width: 100%; border: 0.5px #7c7c7c solid; background-color: #ffffff; font-family: 'Sofia Sans', sans-serif; max-height: 150px; overflow-y: scroll; z-index: 999; } .formselect-wrapper { position: relative; margin-top: 1rem; } / CSS for at vise dropdown, når .formselect-wrapper har en aktiv klasse, f.eks. .focused */ .formselect-wrapper.focused .formselect-dropdown { display: block; } JavaScript (jQuery eksempel):
Her bruges jQuery til at håndtere klik-begivenheder på dropdown-knappen for at vise/skjule menuen, og ændringer i tjekboksene opdaterer den valgte tekst.
$(document).ready(function() { $('.formselect-wrapper').on('click', function(e) { e.stopPropagation(); // Forhindrer at klikket lukker dropdown med det samme $(this).toggleClass('focused'); }); // Luk dropdown hvis der klikkes udenfor $(document).on('click', function() { $('.formselect-wrapper').removeClass('focused'); }); // Håndter ændringer i tjekbokse $('.formselect-wrapper input[type="checkbox"]').on('change', function() { let selectedValues = []; let selectedText = ''; $(this).closest('.formselect-wrapper').find('input[type="checkbox"]:checked').each(function() { selectedValues.push($(this).val()); selectedText += $(this).next('label').text().trim() + ', '; }); // Opdater knapteksten if (selectedValues.length > 0) { $(this).closest('.formselect-wrapper').find('.formselect').text(selectedText.slice(0, -2)); } else { $(this).closest('.formselect-wrapper').find('.formselect').text('Vælg sundhedsforsikring *'); } }); });Tjekbokse vs. Andre Inputfelter
Det er vigtigt at forstå forskellen mellem tjekbokse og andre inputfelter for at vælge den rette løsning:
| Inputfelt | Eksempler på Brug | Tilladte Valg | Interaktion |
|---|---|---|---|
| Tjekboks (Liste) | Valg af pizza toppings, filtre | 0 – alle | Uafhængige valg |
| Tjekboks (Standalone) | Godkendelse af privatlivspolitik | 1 (valgt/umarkeret) | Én mulighed |
| Tjekboks (Indlejret) | Valg af passagerer til flycheck-in | 0 – alle | Overordnet valg påvirker underliggende |
| Radio Knapper | Valg af pizzaskorpetype | 1 | Gensidigt udelukkende |
| Dropdown | Valg af titel (Hr., Fru., Fr.) | 1 | Gensidigt udelukkende |
| Toggle Switches | Aktivering/deaktivering af mørk tilstand | 1 (til/fra) | Binær valgmulighed |
Bedste Praksis for Tjekboks-brugervenlighed
- Brug Standard Visuelle Konventioner: Tjekbokse skal ligne tjekbokse (kvadrater). Undgå cirkler, da de kan forveksles med radio knapper.
- Gør Labelen Klikbar: Sørg for, at brugerne kan klikke på selve label-teksten for at ændre tjekboksens tilstand. Dette øger touch-target størrelsen og forbedrer brugervenligheden på mobile enheder.
- Brug Positivt Formulerede Labels: Undgå dobbeltnegationer. F.eks. "Send mig marketingopdateringer" er bedre end "Send mig ikke marketingopdateringer".
- Logisk Rækkefølge: Præsenter elementer i en logisk og overskuelig rækkefølge. Brug evt. underoverskrifter til lange lister.
- Klar Instruktion: Overvej at tilføje "Vælg alle relevante" eller lignende instruktioner, hvis det er uklart for brugerne.
- Angiv Krav: Hvis der er minimum- eller maksimumkrav til antal valg, skal dette tydeligt angives.
- Vertikal Listning: Oplist tjekbokse vertikalt for bedre læsbarhed og nemmere alignment af labels.
- Standardtilstand: For markedsførings- eller juridiske checkboxes, bør standardtilstanden være umarkeret. Undgå at tvinge brugere til at fravælge.
- Intuitivitet: Sørg for, at både markeret og umarkeret tilstand er klare og utvetydige.
Ofte Stillede Spørgsmål
Kan jeg bruge tjekbokse i en standard HTML SELECT-dropdown?
Nej, HTML's indbyggede <select> element understøtter ikke tjekbokse direkte. Du skal simulere dette ved at bruge <div> elementer og JavaScript, som vist i eksemplerne ovenfor.

Hvordan sender jeg de valgte værdier, når jeg bruger denne metode?
Når formularen indsendes, skal du sørge for, at dine skjulte inputfelter (eller de faktiske tjekbokse, hvis de er en del af en <form> tag) opdateres korrekt med de valgte værdier. Den JavaScript-logik, der opdaterer knappens tekst, kan også bruges til at opdatere skjulte inputfelter.
Er der tilgængelighedsovervejelser?
Ja, det er vigtigt at sikre, at din implementering er tilgængelig. Brug semantisk HTML, korrekte ARIA-attributter (hvis nødvendigt) og test med skærmlæsere for at sikre, at brugerne kan navigere og forstå dropdown-menuen korrekt.
Ved at følge disse retningslinjer kan du effektivt implementere multivalgs dropdowns med tjekbokse, der forbedrer brugeroplevelsen og giver en mere dynamisk og interaktiv webapplikation.
Hvis du vil læse andre artikler, der ligner Multivalgs Valgmuligheder: Tjekbokse i Dropdowns, kan du besøge kategorien Teknologi.
