Hvordan lage en datatalist som er umiddelbart søkbar
Dropdown lister er en fin måte for gir alternativer for et inntastingsfelt, spesielt når listen over tilgjengelige alternativer er lang. En bruker kan velge det alternativet de vil ha ved skriver inn i feltet, eller se gjennom alternativene Det kan være en kamp for det de leter etter. Å kunne søke gjennom alternativene, Det er imidlertid den ideelle løsningen.
Denne oppførselen kan oppnås med HTML element som viser innspillingsforslag for forskjellige kontroller, for eksempel
stikkord. derimot
Viser bare tilgjengelige alternativer når brukeren har har allerede skrevet noe inn i inngangsfeltet.
Vi kan gjøre et inntastingsfelt mer brukbart hvis vi aktiverer brukerne få tilgang til hele listen over alternativer når som helst under inntaksprosessen.
I dette innlegget skal vi se hvordan du lager en rullegardinliste som kan søkes når som helst bruker og
HTML-elementer og litt JavaScript.
1. Lag en datatalist med alternativer
Først oppretter vi en datalist for ulike tekstredigerere. Pass på at verdien av liste
attributt av stikkord er det samme som de
id
av tag - slik binder vi dem til hverandre.
2. Gjør Datalist Synlig
Som standard er HTML-elementet er skjult. Vi kan bare se det, når vi begynn å skrive inn en inngang i feltet er datalisten knyttet til.
Men det er en måte å "tvinge" innholdet til datalisten (dvs. alle sine alternativer) å vises på nettsiden. Vi trenger bare å gi det et passende vise
Eiendomsverdi annet enn ingen
, for eksempel display: block;
.
datalist display: block;
De viste alternativene er ikke valgbare ennå på dette punktet bare nettleseren gjør alternativene den finner i datalisten.
Som nevnt, på grunn av den innebygde oppførselen til element, En del av alternativene vises allerede og kan velges, men bare når brukeren begynner å skrive inn en streng som nettleseren kan finn et matchende alternativ.
Vi må også finne en mekanisme å lage alle alternativer (på ovenstående skjermbilde som vises under rullegardinlisten) valgbar på ethvert annet punkt i inngangsprosessen - når brukerne vil sjekke ut alternativene før de skriver noe, eller mens de allerede har tatt noe inn i feltet.
3. Ta inn
HTML-element
Det er to måter å aktivere brukerne på se og velg alle alternativene når de vil:
- Vi kan legge til en klikk hendelseshåndterer til hvert alternativ, og bruk det til å velge et alternativ når det klikkes på, eller det kan vi også forvandle alternativene inn i en ekte rullegardinliste, som som standard kan velges.
- Vi kan pakk alternativene av datalisten med
HTML-element.
Vi velger den andre metoden, da det er enklere, og det er lov å bli brukt som en tilbakekallingsmekanisme i nettlesere som ikke støtter element. Når en nettleser ikke kan gjengi og vise datalisten, vil den gjør det
element med alle sine muligheter i stedet.
Som standard er å velge
element vises ikke i nettlesere som støtter datalist, det vil si til vi tvinge datalisten til å gjengi innholdet med skjerm: blokk;
CSS regel.
Så når vi pakk alternativene fra ovenstående eksempel (hvor datalist har display: block
) med HTML-kode, ser koden ut nedenfor:
Til se alle alternativene av å velge
I rullegardinlisten må vi bruke attributter flere
for å vise mer enn ett alternativ, og størrelse
for antall alternativer vi ønsker å vise.
4. Legg til en vekslingsknapp
Den fulle rullegardinlisten skal vises bare når brukeren klikk en veksleknapp ved siden av inntastingsfeltet, mens brukeren skriver arbeidsdatabasen vises. la oss endre vise
verdien av datalisten til ingen
, og også legg til en knapp ved siden av inngangsfeltet, som vil bytte til vise
verdien av datalisten, og dermed utløse utseendet til å velge
.
datalist display: none;
Vi må også legge til følgende knapp over datalisten i HTML-filen:
La oss nå se JavaScript. Først definerer vi innledende variabler.
knapp = document.querySelector ('button'); datalist = document.querySelector ('datalist'); velg = document.querySelector ('select'); alternativer = select.options;
Deretter må vi legg til en hendelseslytter (toggle_ddl
) til klikkhendelsen på knappen som vil skifte utseende av datalisten.
button.addEventListener ('klikk', toggle_ddl);
Deretter definerer vi toggle_ddl ()
funksjon. For å gjøre det, må vi sjekk verdien av datalist.style.display
eiendom. Hvis det er en tom streng, er datalisten skjult, så vi må sett verdien til blokkere
, og også til endre knappen fra en pekende pil til en pil som peker opp.
funksjon toggle_ddl () / * hvis DDL er skjult * / hvis (datalist.style.display === ") / * vis DDL * / datalist.style.display = 'blokk'; this.textContent ="¢Â-² "; else hide_select (); funksjon hide_select () / * skjul DDL * / datalist.style.display ="; button.textContent = "âA-a¼";
De hide_select ()
funksjon skjuler datalisten ved å sette inn datalist.style.display
eiendom tilbake til en tom streng, og endre knapp pilen tilbake til å peke nedover.
I det endelige oppsettet, hvis inntastingsfeltene har et tidligere valgt alternativ, og rullegardinlisten også har blitt utløst av en senere knappeknapp, vil previoulsy valgt alternativ også må vises som valgt i rullegardinlisten.
Så la oss legge til følgende markerte kode til toggle_ddl ()
funksjon:
funksjon toggle_ddl () / * hvis DDL er skjult * / hvis (datalist.style.display === ") / * vis DDL * / datalist.style.display = 'blokk'; this.textContent ="¢Â-² "; var val = input.value; for (var i = 0; iVi ønsker også å skjule rullegardinlisten når brukeren skriver inn i inntastingsfeltet (når arbeidsdatabasen vises).
/ * når brukeren vil skrive inn tekstfelt, skjul DDL * / input = document.querySelector ('input'); input.addEventListener ('fokus', hide_select);5. Oppdater inndata når et alternativ er valgt
Til slutt, la oss Legg til en
endring
hendelseshåndterer tiltag, slik at når brukeren velger et alternativ fra rullegardinlisten, vil verdien bli vist inni
feltet også.
/ * når bruker velger et alternativ fra DDL, skriv det til tekstfelt * / select.addEventListener ('change', fill_input); funksjon fill_input () input.value = alternativer [this.selectedIndex] .value; hide_select ();ulempene
Den største ulempen ved denne teknikken er den Fravær av en direkte måte å stilte på
element med CSS (utseendet til
og
koder varierer over forskjellige nettlesere).
I Firefox er også inntastingen tilpasset alternativene som inneholder Inndatategnene, mens andre nettlesere samsvarer med alternativer som starte med de tegnene. W3C-spesifikasjonen for datalisten angir ikke eksplisitt hvordan samsvarende skal gjøres.
Annet enn det, er denne metoden god og fungerer i alle de store nettleserne, mens i nettlesere hvor det ikke kan fungere, kan brukerne fortsatt se rullegardinlisten, bare forslagene vises ikke.
Sjekk ut den endelige demoen med litt CSS styling nedenfor: