Hur man skapar en datalist som är direkt sökbar
Dropdown listor är ett snyggt sätt för tillhandahålla alternativ för ett inmatningsfält, särskilt när listan över tillgängliga alternativ är långa. En användare kan välja det alternativ de vill ha med skriver in i fältet, eller titta igenom alternativen Det kan vara en match för vad de letar efter. Att kunna söka igenom alternativen, Det är dock den perfekta lösningen.
Detta beteende kan uppnås med HTML-element som visar inmatningsförslag för olika kontroller, t.ex.
märka. dock
Visar endast tillgängliga alternativ när användaren har har redan skrivit något in i inmatningsfältet.
Vi kan göra ett inmatningsfält mer användbart om vi aktiverar användarna få tillgång till hela listan med alternativ när som helst under ingångsprocessen.
I det här inlägget ska vi se hur man skapar en rullgardinslista som kan sökas när som helst använda och
HTML-element och lite JavaScript.
1. Skapa en Datalist med alternativ
Först skapar vi en datalist för olika textredigerare. Se till att värdet på lista
attribut av märka är det samma som de
id
av tagg - så här bindar vi dem till varandra.
2. Gör Datalisten Synlig
Som standard är HTML-element är dold. Vi kan bara se det när vi börja skriva in en inmatning in i fältet datalisten är kopplad till.
Det finns dock ett sätt att "tvinga" innehållet i datalisten (dvs alla dess alternativ) att visas på webbsidan. Vi behöver bara ge det en lämplig visa
fastighetsvärde Förutom ingen
, till exempel display: block;
.
datalist display: block;
De visade alternativen är ännu inte valbara vid denna tidpunkt bara webbläsaren gör alternativen det finns inom datalisten.
Som nämnts på grund av det inbyggda beteendet hos element, En del av alternativen visas redan och kan väljas, men bara när användaren börjar skriva in en sträng som webbläsaren kan hitta ett matchande alternativ.
Vi måste också hitta en mekanism att göra Allt alternativ (på ovanstående skärmdump som visas under rullgardinsmenyn) valbara på någon annan punkt i processen för ingångsupptagning - när användarna vill kolla in alternativen innan de skriver något, eller medan de redan har tagit något i inmatningsfältet.
3. Ta in
HTML-element
Det finns två sätt att aktivera användare att se och välj alla alternativ närhelst de vill
- Vi kan lägga till en klicka händelsehanteraren till varje alternativ, och använd det för att välja ett alternativ när det klickas på, eller så kan vi också omvandla alternativen in i en riktig drop-down lista, som som standard kan väljas.
- Vi kan paketera alternativen av datalisten med
HTML-element.
Vi väljer den andra metoden, eftersom det är enklare, och det får användas som en återgångsmekanism i webbläsare som inte stöder element. När en webbläsare inte kan göra och visa datalistan, så är det gör
element med alla dess alternativ istället.
Som standard är Välj
element visas inte i webbläsare som stöder datalist, det vill säga tills vi tvinga datalisten att göra innehållet med display: block;
CSS-regeln.
Så när vi paketera alternativen från ovanstående exempel (där datalist har display: block
) med HTML-taggen ser koden ut som följer:
Till se alla alternativ av Välj
I listrutan måste vi använda attributen flera olika
för att visa mer än ett alternativ, och storlek
för hur många alternativ vi vill visa.
4. Lägg till en växlingsknapp
Den fullständiga listrutan ska visas endast när användaren klicka på en växlingsknapp bredvid inmatningsfältet, medan användaren skriver arbetsdatalisten visas. låt oss ändra visa
värdet av datalisten till ingen
, och även lägg till en knapp bredvid ingångsfältet, vilket kommer att växla mellan visa
värdet av datalisten och följaktligen utlösa utseendet på Välj
.
datalist display: none;
Vi måste också lägga till följande knapp ovanför datalistan i HTML-filen:
Nu får vi se JavaScript. Först definierar vi initiala variabler.
button = document.querySelector ('button'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); alternativ = select.options;
Nästa måste vi lägg till en händelse lyssnare (toggle_ddl
) till klickhändelsen på knappen som kommer att byta ut datalistens utseende.
button.addEventListener ('click', toggle_ddl);
Då definierar vi toggle_ddl ()
fungera. För att göra det måste vi kolla värdet på datalist.style.display
fast egendom. Om det är en tom sträng är datalisten dold, så vi behöver sätta sitt värde till blockera
, och också till ändra knappen från en nedåtriktad pil till en pil som pekar upp.
funktionen toggle_ddl () / * om DDL är gömd * / om (datalist.style.display === ") / * visa DDL * / datalist.style.display = 'block'; this.textContent ="¢Â-² "; else hide_select (); funktion hide_select () / * hide DDL * / datalist.style.display ="; button.textContent = "âA-a¼";
De hide_select ()
fungera döljer datalisten genom att ställa in datalist.style.display
egenskapen tillbaka till en tom sträng och ändra knapp-pilen tillbaka för att peka nedåt.
I den slutliga inställningen, om inmatningsfälten håller ett tidigare valt alternativ och rullgardinsmenyn också har utlösts av en senare knappknapp, kommer det tidigare alternativet också att användas måste visas som vald i rullgardinsmenyn.
Så, låt oss lägga till följande markerade kod till toggle_ddl ()
fungera:
funktionen toggle_ddl () / * om DDL är gömd * / om (datalist.style.display === ") / * visa DDL * / datalist.style.display = 'block'; this.textContent ="¢Â-² "; varval = input.value; för (var i = 0; iVi vill också dölja rullgardinsmenyn när användaren skriver in i inmatningsfältet (när arbetsdatabladet visas).
/ * när användaren vill skriva in i textfältet, gömma DDL * / input = document.querySelector ('input'); input.addEventListener ('focus', hide_select);5. Uppdatera Inmatning när ett alternativ väljs
Slutligen, låt oss Lägg till en
Byta
händelsehanterare tilltagg, så att när användaren väljer ett alternativ i rullgardinslistan visas dess värde inuti
fält också.
/ * När användaren väljer ett alternativ från DDL, skriv det till textfältet * / välj.addEventListener ('ändra', fill_input); funktion fill_input () input.value = options [this.selectedIndex] .value; hide_select ();nackdelar
Den största nackdelen med denna teknik är frånvaron av ett direkt sätt att utforma
element med CSS (utseendet på
och
taggar varierar över olika webbläsare).
Även i Firefox matchas inmatningstexten mot alternativ som innehåller Inmatningsfälten, medan andra webbläsare matchar alternativ som börja med dessa tecken. W3C-specifikationen för datalist anger inte explicit hur matchningen ska göras.
Annat än det är denna metod bra och fungerar i alla större webbläsare, medan i webbläsare där det kanske inte fungerar kan användarna fortfarande se rullgardinsmenyn, bara förslagen visas inte.
Kolla in den slutliga demo med lite CSS-styling nedan: