Come creare un datalist che è immediatamente ricercabile
Gli elenchi a discesa sono un ottimo modo per fornire opzioni per un campo di input, in particolare quando l'elenco delle opzioni disponibili è lungo. Un utente può scegliere l'opzione che desidera digitando nel campo o esaminare le opzioni che potrebbero corrispondere a ciò che stanno cercando. Essere in grado di cercare tra le opzioni, tuttavia, è la soluzione ideale.
Questo comportamento può essere raggiunto con
Possiamo rendere più utilizzabile un campo di input se consentiamo agli utenti di accedere all'intero elenco di opzioni in qualsiasi momento durante il processo di acquisizione degli input.
In questo post vedremo come creare un elenco a discesa che sia ricercabile in qualsiasi momento usando il
1. Creare un Datalist con Opzioni
Innanzitutto, creiamo un datalist per diversi editor di testo. Assicurati che il valore dell'attributo list
di il tag è lo stesso
id
del
2. Rendi visibile il datalist
Di default, il
Tuttavia esiste un modo per "forzare" il contenuto del datalist (cioè tutte le sue opzioni) a comparire sulla pagina web . Abbiamo solo bisogno di dargli un valore di proprietà display
adeguato diverso da none
, ad esempio display:block;
.
datalist {display: block; }
Le opzioni visualizzate non sono ancora selezionabili a questo punto, il browser esegue solo il rendering delle opzioni che trova all'interno del datalist.
Come già detto, a causa del comportamento integrato del3. Entra nel
Esistono due modi per consentire agli utenti di visualizzare e selezionare tutte le opzioni quando lo desiderano:
- Possiamo aggiungere un gestore di eventi click ad ogni opzione e usarlo per selezionare un'opzione quando viene cliccato, oppure possiamo anche trasformare le opzioni in un vero elenco a discesa, che, per impostazione predefinita, è selezionabile.
- Possiamo avvolgere le opzioni del datalist con il
Scegliamo il secondo metodo, in quanto è più semplice, e può essere usato come meccanismo di fallback nei browser che non supportano il
Per impostazione predefinita, l'elemento select
non viene visualizzato nei browser che supportano il datalist, ovvero finché non viene forzato il dataalist a renderne il contenuto con display: block;
Regola CSS.
Quindi, quando avvolgiamo le opzioni dell'esempio precedente (dove il datalist ha display:block
) con
Per visualizzare tutte le opzioni di
select
nell'elenco a discesa, dobbiamo utilizzare gli attributi multiple
per mostrare più opzioni e le size
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 accanto al campo di immissione, mentre l'utente digita il datalist funzionante. Cambiamo il valore di display
del datalist su none
, e aggiungiamo anche un pulsante accanto al campo di input, che commuterà il valore di display
del datalist, e di conseguenza innescare l'aspetto di select
.
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 le variabili iniziali .
button = document.querySelector ('button'); datalist = document.querySelector ('datalist'); select = document.querySelector ('select'); options = select.options;
Successivamente, dobbiamo aggiungere un listener di eventi ( toggle_ddl
) all'evento click del pulsante che cambierà l'aspetto del datalist .
button.addEventListener ('click', toggle_ddl);
Quindi, definiamo la funzione toggle_ddl()
. Per fare ciò, dobbiamo verificare il valore della proprietà datalist.style.display
. Se è una stringa vuota, il datalist è nascosto, quindi dobbiamo impostare il suo valore per block
, e anche per cambiare 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 = "Ã ¢ Â-¼"; }
La funzione hide_select()
nasconde il datalist impostando la proprietà datalist.style.display
su una stringa vuota e cambiando la freccia del pulsante di nuovo 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, l'opzione selezionata in precedenza deve anche essere visualizzata come selezionata nell'elenco a discesa.
Quindi, aggiungiamo il seguente codice evidenziato alla funzione toggle_ddl()
:
function toggle_ddl () {/ * se DDL è nascosto * / if (datalist.style.display === '') {/ * mostra DDL * / datalist.style.display = 'block'; this.textContent = "Ã ¢ Â-²"; var val = input.value; per (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 datalist 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
Infine, aggiungiamo un gestore di eventi di
change
al/ * 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 è l' assenza di un modo diretto per lo stile
elemento con CSS (l'aspetto del e Inoltre, in Firefox, il testo di input è abbinato alle opzioni che contengono i caratteri di input, mentre altri browser corrispondono alle opzioni che iniziano con quei caratteri. Le specifiche W3C per i datalist non specificano esplicitamente come dovrebbe essere eseguita la corrispondenza.
Oltre a questo, questo metodo è valido e funziona su tutti i principali browser, mentre nei browser in cui potrebbe non funzionare, gli utenti possono ancora vedere l'elenco a discesa, ma i suggerimenti non verranno visualizzati.
Guarda la demo finale con un po 'di stile CSS qui sotto:
Migliora i tuoi segnalibri Chrome con Dewey
I browser Internet hanno fatto molta strada dai tempi di Netscape Navigator, ma il modo in cui navighiamo e gestiamo i nostri segnalibri non è cambiato molto nel corso degli anni. Non c'è niente di veramente sbagliato nella classica visualizzazione delle cartelle, ma se esistesse un modo migliore per gestire i segnalibri, completo di funzionalità di ricerca più intelligenti e supporto per il tagging? Be
Le 10 migliori app per registrare le pietre miliari e gli obiettivi del tuo bambino
Avere un figlio è una delle grandi gioie della vita, o almeno così mi è stato detto. Se sei un nuovo genitore, è naturale che tu voglia documentare e registrare la vita del tuo bambino . Che si tratti di un record giornaliero o di traguardi come una prima parola o il primo compleanno, non ci sarà mai una carenza di ricordi che necessitino di documentazione . Ino