Sådan oprettes en datatalist, der er øjeblikkeligt søgbar
Dropdown lister er en pæn måde for giver muligheder for et inputfelt, især når listen over tilgængelige muligheder er lang. En bruger kan vælge den mulighed, de ønsker med skriver ind i feltet, eller se gennem mulighederne det kan være en kamp for, hvad de leder efter. At kunne søge gennem mulighederne, Det er dog den ideelle løsning.
Denne adfærd kan opnås med HTML element som viser inputforslag til forskellige kontroller, som f.eks
tag. Imidlertid
Viser kun de tilgængelige indstillinger, når brugeren har har allerede skrevet noget ind i inputfeltet.
Vi kan gøre et indtastningsfelt mere brugbart, hvis vi gør det muligt for brugerne at få adgang til hele listen over muligheder når som helst under indlæsningsprocessen.
I dette indlæg vil vi se, hvordan du opretter en rulleliste, der kan søges når som helst bruger og
HTML-elementer og lidt JavaScript.
1. Opret en datatalist med indstillinger
Først opretter vi en datalist for forskellige tekstredaktører. Sørg for, at værdien af liste
attributten til tag er det samme som det
id
af tag - sådan knytter vi dem til hinanden.
2. Gør datatalisten synlig
Som standard er HTML element er skjult. Vi kan kun se det, når vi Begynd at skrive en indtastning ind i feltet, datalisten er knyttet til.
Men der er en måde at "tvinge" indholdet af datalisten (dvs. alle sine muligheder) at blive vist på websiden. Vi behøver kun at give det et passende Skærm
ejendomsværdi andet end ingen
, for eksempel display: block;
.
datalist display: block;
De viste muligheder er endnu ikke valgbare på dette tidspunkt kun browseren gør mulighederne det findes inden for datalisten.
Som nævnt på grund af den indbyggede opførsel af element, En del af indstillingerne vises allerede og kan vælges, men kun når brugeren begynder at skrive en streng, som browseren kan find en matchende mulighed.
Vi skal også finde en mekanisme til at lave alle indstillinger (på ovenstående skærmbillede vises under dropdown datalisten) valgbar på et hvilket som helst andet punkt i processen til at tage input - når brugere vil tjekke mulighederne, før de skriver noget, eller mens de allerede har taget noget i inputfeltet.
3. Tag ind i
HTML Element
Der er to måder at aktivere brugerne på se og vælg alle mulighederne når de vil:
- Vi kan tilføje en klik på hændelseshåndterer til enhver indstilling, og brug den til at vælge en indstilling, når den klikkes på, eller det kan vi også omdanne mulighederne ind i en rigtig drop-down liste, som som standard kan vælges.
- Vi kan Indpakker indstillingerne af datalisten med
HTML-element.
Vi vælger den anden metode, da den er enklere, og den må bruges som en tilbageslagsmekanisme i browsere, der ikke understøtter element. Når en browser ikke kan gøre og vise datalisten, skal den gør det
element med alle sine muligheder i stedet.
Som standard er Vælg
element vises ikke i browsere, der understøtter datalisten, det vil sige indtil vi tvinge datalisten til at gøre sit indhold tilfredsstillende med display: blok;
CSS regel.
Så når vi Indpakker indstillingerne fra ovenstående eksempel (hvor datalisten har display: block
) med HTML-kode, ser koden ud nedenfor:
Til se alle muligheder af Vælg
I rullelisten skal vi bruge attributterne mange
for at vise mere end en mulighed, og størrelse
for antallet af muligheder, vi ønsker at vise.
4. Tilføj en Toggle-knap
Den fulde rulleliste skal vises kun når brugeren klik på en skiftknap ved siden af indtastningsfeltet, mens brugeren skriver, vises arbejdsdatabasen. Lad os ændre Skærm
værdien af datalisten til ingen
, og også Tilføj en knap ved siden af inputfeltet, som vil skifte Skærm
værdien af datalisten og dermed udløse udseendet af Vælg
.
datalist display: none;
Vi skal også tilføje følgende knap over datalisten i HTML-filen:
Lad os nu se JavaScript. Først definerer vi indledende variabler.
button = document.querySelector ('button'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); indstillinger = select.options;
Næste skal vi Tilføj en begivenhedslytter (toggle_ddl
) til klikhændelsen for den knap, som vil skifte udseende af datalisten.
button.addEventListener ('klik', toggle_ddl);
Derefter definerer vi toggle_ddl ()
fungere. For at gøre det skal vi Kontroller værdien af datalist.style.display
ejendom. Hvis det er en tom streng, er datalisten skjult, så vi skal sætte sin værdi til blok
, og også til skift knap fra en pil nedad til en pil, der peger op.
funktion toggle_ddl () / * hvis DDL er skjult * / hvis (datalist.style.display === ") / * vis DDL * / datalist.style.display = 'block'; this.textContent ="¢Â-² "; else hide_select (); funktion hide_select () / * skjul DDL * / datalist.style.display ="; button.textContent = "âÂ-¼";
Det hide_select ()
fungere skjuler datalisten ved at indstille datalist.style.display
ejendom tilbage til en tom streng, og skift piletilstanden tilbage for at pege nedad.
I den endelige opsætning, hvis indtastningsfelterne indeholder en tidligere valgt indstilling, og rullelisten også er udløst af en senere knap klik, vælges den tidligere valgte valgmulighed også skal vises som valgt i rullelisten.
Så lad os tilføje følgende fremhævede kode til toggle_ddl ()
fungere:
funktion toggle_ddl () / * hvis DDL er skjult * / hvis (datalist.style.display === ") / * vis DDL * / datalist.style.display = 'block'; this.textContent ="¢Â-² "; var val = input.value; for (var i = 0; iVi ønsker også at skjule rullemenuen, når brugeren skriver ind i indtastningsfeltet (på det tidspunkt vil arbejdsdatabasen blive vist).
/ * når brugeren ønsker at skrive i tekstfelt, gem DDL * / input = document.querySelector ('input'); input.addEventListener ('fokus', hide_select);5. Opdater Indgang, når et valg er valgt
Endelig lad os Tilføj en
lave om
hændelseshandler tiltag, så når brugeren vælger en valgmulighed på rullelisten, vises dens værdi inde i
felt også.
/ * Når bruger vælger en indstilling fra DDL, skriv den til tekstfelt * / select.addEventListener ('change', fill_input); funktion fill_input () input.value = options [this.selectedIndex] .value; hide_select ();Ulemper
Den største ulempe ved denne teknik er den fravær af en direkte måde at style the
element med CSS (udseendet af
og
tags varierer på tværs af forskellige browsere).
Også i Firefox matches indtasteteksten mod valgmuligheder som indeholder Indtastnings tegnene, mens andre browsere matcher valgmuligheder som Begynd med disse tegn. W3C spec for datalisten angiver ikke eksplicit, hvordan matchningen skal udføres.
Bortset fra det er denne metode god og fungerer i alle større browsere, mens i browsere, hvor det måske ikke virker, kan brugerne stadig se rullemenuen, kun forslagene vises ikke.
Tjek den endelige demo med en smule CSS styling nedenfor: