Een datalijst maken die direct doorzoekbaar is
Dropdown-lijsten zijn een leuke manier voor het bieden van opties voor een invoerveld, met name wanneer de lijst met beschikbare opties lang is. Een gebruiker kan de gewenste optie kiezen typen in het veld, of doorzoek de opties dat kan een match zijn voor wat ze zoeken. Door de opties kunnen zoeken, echter, is de ideale oplossing.
Dit gedrag kan worden bereikt met de HTML-element dat geeft invoersuggesties weer voor verschillende besturingselementen, zoals de
label. Echter
toont alleen de beschikbare opties wanneer de gebruiker heeft al iets getypt in het invoerveld.
We kunnen een invoerveld beter bruikbaar maken als we gebruikers in staat stellen dit te doen toegang tot de volledige lijst met opties op elk moment tijdens het invoerproces.
In deze post gaan we kijken hoe we een kunnen maken vervolgkeuzelijst die op elk moment doorzoekbaar is de ... gebruiken en
HTML-elementen en een beetje JavaScript.
1. Maak een datalist met opties
Eerst maken we een datalist voor verschillende teksteditors. Zorg ervoor dat de waarde van de lijst
attribuut van de label is hetzelfde als de
ID kaart
van de tag - dit is hoe we ze aan elkaar binden.
2. Maak de Datalist zichtbaar
Standaard is de HTML-element is verborgen. We kunnen het alleen zien, wanneer we begin een invoer te typen in het veld waar de datalist aan is gehecht.
Er is echter een manier om de inhoud van de datalist (dat wil zeggen alle opties) te "forceren". verschijnen op de webpagina. We hoeven het alleen maar geschikt te maken tonen
eigendoms-waarde anders dan geen
, bijvoorbeeld display: block;
.
datalist display: block;
De weergegeven opties zijn nog niet selecteerbaar op dit moment alleen de browser geeft de opties weer het vindt in de datalist.
Zoals eerder vermeld, vanwege het ingebouwde gedrag van de element, een deel van de opties wordt al weergegeven en kan worden geselecteerd, maar alleen wanneer de gebruiker begint met typen in een tekenreeks waarnaar de browser kan zoek een bijpassende optie.
We moeten ook een mechanisme vinden om te maken allemaal opties (op de bovenstaande screenshot weergegeven onder de dropdown-datalist) selecteerbaar op elk ander punt van het invoerproces - wanneer gebruikers de opties willen bekijken voordat ze iets typen, of terwijl ze al iets hebben opgenomen in het invoerveld.
3. Breng het
HTML-element
Er zijn twee manieren om gebruikers in staat te stellen bekijk en selecteer alle opties wanneer ze maar willen:
- We kunnen een toevoegen klik op gebeurtenishandler naar elke optie en gebruik deze om een optie te selecteren wanneer erop wordt geklikt, of we kunnen ook transformeren de opties in een echte drop-down lijst, die standaard kan worden geselecteerd.
- We kunnen omloop de opties van de datalist met de
HTML-element.
We zullen de tweede methode kiezen, omdat deze eenvoudiger is, en deze mag worden gebruikt als een terugvalmechanisme in browsers die geen ondersteuning bieden voor de element. Wanneer een browser de datalist niet kan weergeven en weergeven, is dit het geval maakt het
element met al zijn opties in plaats daarvan.
Standaard is de kiezen
element verschijnt niet in browsers die datalist ondersteunt, dat wil zeggen, totdat we de datalist dwingen de inhoud ervan weer te geven met de weergave: blok;
CSS-regel.
Dus, wanneer wij omloop de opties uit het bovenstaande voorbeeld (waarbij datalist heeft display: block
) met de HTML-tag, ziet de code er als volgt uit:
Naar zie alle opties van kiezen
in de vervolgkeuzelijst moeten we de kenmerken gebruiken meerdere
om meer dan één opties te laten zien, en grootte
voor het aantal opties dat we willen laten zien.
4. Voeg een schakelknop toe
De volledige vervolgkeuzelijst hoort te verschijnen enkel en alleen wanneer de gebruiker klikt op een schakelknop naast het invoerveld, terwijl de gebruiker typt, wordt de werkende datalist weergegeven. Laten we verander de tonen
waarde van de datalist naar geen
, en ook voeg een knop toe naast het invoerveld, dat de tonen
waarde van de datalist, en bijgevolg het uiterlijk van activeren kiezen
.
datalist display: none;
We moeten ook de volgende knop boven de datalist in het HTML-bestand toevoegen:
Laten we nu het JavaScript zien. Eerst definiëren we de initiële variabelen.
button = document.querySelector ('knop'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); options = select.options;
Vervolgens moeten we voeg een gebeurtenislistener toe (toggle_ddl
) naar de klikgebeurtenis van de knop die zal schakel het uiterlijk van de datalist.
button.addEventListener ('klik', toggle_ddl);
Vervolgens definiëren we de toggle_ddl ()
functie. Om dit te doen, moeten we controleer de waarde van de datalist.style.display
eigendom. Als het een lege string is, is de datalist verborgen, dus dat moeten we doen stel de waarde in op blok
, en ook aan verander de knop van een naar beneden wijzende pijl naar een pijl die naar boven wijst.
function toggle_ddl () / * als DDL verborgen is * / if (datalist.style.display === ") / * toon DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; else hide_select (); function hide_select () / * hide DDL * / datalist.style.display ="; button.textContent = "à¢Â-¼";
De hide_select ()
functie verbergt de datalist door het instellen van datalist.style.display
terug naar een lege reeks en verander de knoppijl terug naar beneden.
Als in de laatste configuratie de invoervelden een eerder geselecteerde optie bevatten en de vervolgkeuzelijst ook is geactiveerd door een latere klik op de knop, is de vooraf geselecteerde optie ook moet worden weergegeven als geselecteerd in de vervolgkeuzelijst.
Dus laten we de volgende gemarkeerde code toevoegen aan de toggle_ddl ()
functie:
function toggle_ddl () / * als DDL verborgen is * / if (datalist.style.display === ") / * toon DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; var val = input.value; for (var i = 0; iWe willen ook de vervolgkeuzelijst verbergen wanneer de gebruiker in het invoerveld typt (op het moment dat de werkende datalist verschijnt).
/ * verberg DDL * / input = document.querySelector ('invoer') wanneer de gebruiker in het tekstveld wil typen; input.addEventListener ('focus', hide_select);5. Voer een update uit wanneer een optie is geselecteerd
Eindelijk, laten we Voeg een ... toe
verandering
gebeurtenishandler naar detag, zodat wanneer de gebruiker een optie selecteert in de vervolgkeuzelijst, de waarde ervan wordt weergegeven in de
veld ook.
/ * wanneer de gebruiker een optie uit DDL selecteert, schrijft u deze naar het tekstveld * / select.addEventListener ('change', fill_input); function fill_input () input.value = options [this.selectedIndex] .value; hide_select ();nadelen
Het belangrijkste nadeel van deze techniek is de afwezigheid van een directe manier om het
element met CSS (het uiterlijk van de
en
tags kunnen verschillen in verschillende browsers).
In Firefox is de invoertekst ook gekoppeld aan opties die bevat de invoertekens, terwijl andere browsers dezelfde opties matchen begin met die karakters. De W3C-specificatie voor de datalist specificeert niet expliciet hoe de matching moet worden gedaan.
Anders dan dat, deze methode is goed en werkt in alle belangrijke browsers, terwijl gebruikers in browsers waar dit niet werkt, de vervolgkeuzelijst nog steeds kunnen zien, worden alleen de suggesties niet weergegeven.
Bekijk de definitieve demo met een beetje CSS-styling hieronder: