Come creare un datalist che è immediatamente ricercabile
Elenchi a discesa sono un modo pulito per fornendo opzioni per un campo di input, in particolare quando l'elenco delle opzioni disponibili è lungo. Un utente può scegliere l'opzione desiderata digitando nel campo, o guarda attraverso le opzioni quello può essere una corrispondenza per quello che stanno cercando. Essere in grado di cercare tra le opzioni, tuttavia, è la soluzione ideale.
Questo comportamento può essere raggiunto con Elemento HTML che visualizza suggerimenti di input per diversi controlli, come ad esempio
etichetta. però
mostra solo le opzioni disponibili quando l'utente ha ho già battuto qualcosa nel campo di input.
Possiamo rendere più utilizzabile un campo di input se abilitiamo gli utenti accedi alla lista completa delle opzioni in qualsiasi momento durante il processo di acquisizione dei dati.
In questo post vedremo come creare un elenco a discesa che è ricercabile in qualsiasi momento usando il e
Elementi HTML e un po 'di JavaScript.
1. Creare un Datalist con Opzioni
Innanzitutto, creiamo un datalist per diversi editor di testo. Assicurati che il valore di elenco
attributo del etichetta equivale a il
id
del tag: è così che li leghiamo gli uni agli altri.
2. Rendere visibile il datalista
Di default, il L'elemento HTML è nascosto. Possiamo vederlo solo quando noi inizia a digitare un input nel campo a cui è associato il datalist.
Tuttavia c'è un modo per "forzare" il contenuto del datalist (cioè tutte le sue opzioni) apparire sulla pagina web. Abbiamo solo bisogno di dargli un adatto display
costo dell'immobile diverso da nessuna
, per esempio blocco di visualizzazione;
.
datalist display: block;
Le opzioni visualizzate non sono ancora selezionabili a questo punto, solo il browser rende le opzioni trova all'interno del datalist.
Come già detto, a causa del comportamento integrato del elemento, una parte delle opzioni appare già e può essere selezionata, ma solo quando l'utente inizia a digitare una stringa a cui il browser può trova un'opzione corrispondente.
Dobbiamo anche trovare un meccanismo da fare tutti opzioni (nella schermata sopra visualizzata sotto il datalist a discesa) selezionabile a qualsiasi altro punto del processo di presa di input - quando gli utenti vogliono verificare le opzioni prima di digitare qualcosa o mentre hanno già inserito qualcosa nel campo di input.
3. Entra nel
Elemento HTML
Ci sono due modi per abilitare gli utenti vedere e selezionare tutte le opzioni ogni volta che vogliono:
- Possiamo aggiungere un fare clic su gestore di eventi ad ogni opzione, e usarlo per selezionare un'opzione quando viene cliccato su, o possiamo anche trasformare le opzioni in un vero elenco a discesa, che, per impostazione predefinita, è selezionabile.
- Noi possiamo avvolgere le opzioni del datalist con il
Elemento HTML.
Scegliamo il secondo metodo, in quanto è più semplice, e può essere utilizzato come meccanismo di riserva nei browser che non supportano il elemento. Quando un browser non può visualizzare e visualizzare il datalist, esso rende il
elemento con tutte le sue opzioni anziché.
Di default, il selezionare
l'elemento non compare nei browser che supportano il datalist, cioè fino a quando non lo facciamo noi costringere il datalist a renderne il contenuto con il blocco di visualizzazione;
Regola CSS.
Quindi, quando noi avvolgere le opzioni dall'esempio sopra (dove il datalist ha blocco di visualizzazione
) con il Tag HTML, il codice ha un aspetto simile al seguente:
A vedere tutte le opzioni di selezionare
nell'elenco a discesa, dobbiamo usare gli attributi multiplo
per mostrare più di una opzione, e taglia
per il numero di opzioni che vogliamo mostrare.
4. Aggiungi un pulsante Attiva / disattiva
L'elenco a discesa completo dovrebbe apparire solo quando l'utente fa clic su un pulsante di attivazione / disattivazione accanto al campo di input, mentre l'utente digita il datalist funzionante viene mostrato. Diamo cambiare il display
valore del datalist a nessuna
, e anche aggiungi un pulsante accanto al campo di input, che alternerà il display
valore del datalist, e di conseguenza innescare l'aspetto di selezionare
.
datalist display: none;
Abbiamo anche bisogno di aggiungere il seguente pulsante sopra il datalist nel file HTML:
Ora vediamo il JavaScript. In primo luogo, definiamo il variabili iniziali.
button = document.querySelector ('button'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); options = select.options;
Quindi, dobbiamo aggiungi un listener di eventi (toggle_ddl
) all'evento click del pulsante che lo farà attiva / disattiva l'aspetto del datalist.
button.addEventListener ('click', toggle_ddl);
Quindi, definiamo il toggle_ddl ()
funzione. Per fare ciò, dobbiamo controllare il valore del datalist.style.display
proprietà. Se è una stringa vuota, il datalist è nascosto, quindi è necessario imposta il suo valore a bloccare
, e anche a cambia il pulsante da una freccia rivolta verso il basso a una freccia rivolta verso l'alto.
function toggle_ddl () / * se DDL è nascosto * / if (datalist.style.display === ") / * mostra DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; else hide_select (); function hide_select () / * nascondi DDL * / datalist.style.display ="; button.textContent = "âAA¼";
Il hide_select ()
funzione nasconde il datalist impostando il datalist.style.display
proprietà di nuovo a una stringa vuota, e cambiando la freccia del pulsante di nuovo a punto verso il basso.
Nella configurazione finale, se i campi di input contengono un'opzione selezionata in precedenza e l'elenco a discesa è stato attivato anche da un clic del pulsante successivo, anche l'opzione selezionata in precedenza deve essere mostrato come selezionato nell'elenco a discesa.
Quindi, aggiungiamo il seguente codice evidenziato al toggle_ddl ()
funzione:
function toggle_ddl () / * se DDL è nascosto * / if (datalist.style.display === ") / * mostra DDL * / datalist.style.display = 'block'; this.textContent =" âÂ-² "; var val = input.value; for (var i = 0; iVogliamo anche nascondere l'elenco a discesa quando l'utente sta digitando nel campo di input (al momento in cui apparirà il datalogger funzionante).
/ * quando l'utente vuole digitare nel campo di testo, nascondere DDL * / input = document.querySelector ('input'); input.addEventListener ('focus', hide_select);5. Aggiorna input quando un'opzione è selezionata
Finalmente, andiamo aggiungere un
modificare
gestore di eventi altag, in modo che quando l'utente seleziona un'opzione dall'elenco a discesa, il suo valore verrà visualizzato all'interno di
campo pure.
/ * quando l'utente seleziona un'opzione da DDL, scriverla nel campo di testo * / select.addEventListener ('change', fill_input); function fill_input () input.value = options [this.selectedIndex] .value; hide_select ();svantaggi
Lo svantaggio principale di questa tecnica è il assenza di un modo diretto per lo stile
elemento con CSS (l'aspetto del
e
i tag variano tra diversi browser).
Inoltre, in Firefox, il testo di input viene confrontato con le opzioni contiene i caratteri di input, mentre altri browser corrispondono alle opzioni iniziare con quei personaggi. Le specifiche W3C per i datalist non specificano esplicitamente come dovrebbe essere eseguita la corrispondenza.
Oltre a questo, questo metodo è buono e funziona in tutti i principali browser, mentre nei browser in cui potrebbe non funzionare, gli utenti possono ancora visualizzare l'elenco a discesa, ma i suggerimenti non verranno visualizzati.
Guarda la demo finale con un po 'di stile CSS qui sotto: