Sommario
ComboBoxComponent
ComboBoxComponent è un componente scritto in vanilla JavaScript molto leggero (poco più di 7KB) e senza alcuna dipendenza da altre librerie. Vediamo come includerlo nei nostri progetti.
Installazione
È possibile installare ComboBoxComponent sia importandolo come modulo via npm in ambienti di sviluppo che prevedano tale possibilità sia includendolo con il tag <script>
in una pagina HTML.
Importazione come modulo
ComboBoxComponent viene solitamente scaricato tramite npm.
npm install --save combobox-component
Successivamente si dovranno importare i file necessari nel proprio progetto.
Importazione via <script>
ComboBoxComponent funziona anche in ambienti non modulari. È possibile includere i file necessari con un indirizzo relativo
o tramite jsDelivr CDN.
In questo caso la classe ComboBox
sarà accessibile tramite l'oggetto ComboBoxComponent
.
ComboBox
La classe ComboBox( input_id, settings )
attende due argomenti: il primo è l'id dell'elemento <input type="text">
per il quale creare il combobox; il secondo (settings
) è un oggetto JavaScript con le impostazioni definite dall'utente.
Esempio 1
Per passare un elenco predefinito di elementi da mostrare nel combobox occorre passare un array settings.items
in cui ogni elemento è un oggetto che dispone delle proprietà id, name e descr. Dopo la selezione di un elemento del combobox il valore id sarà disponibile in un campo di testo nascosto con id input_id + '-hinput': nell'esempio sotto quindi pickup-input-hinput.
Esempio 2
Quando l'utente seleziona un elemento del combobox si può eseguire una funzione di callback assegnandola alla proprietà settings.onSelect
che riceverà come argomento l'oggetto HTMLLIElement
dell'elemento selezionato. Il principale uso è sincronizzare un altro combobox ma non è escluso un qualunque altro tipo di utilizzo.
Esempio 3
Ogni elemento dell'oggetto setting.items
deve avere obbligatoriamente le proprietà id, name e descr ma è possibile aggiungere anche altre proprietà. La proprietà icon: 'nome-icona'
, ad esempio, abiliterà l'uso di un'icona definita nei CSS (lo spazio disponibile è 40x40px). Per icon: 'nome-icona'
la classe CSS risultante sarà .icon-nome-icona
. Si possono inoltre aggiungere dei valori arbitrari.
A seguire abbiamo inserito, ad esempio, una proprietà aggiuntiva in ciascun elemento di settings.items
- electric_cars - da usare in congiunzione con la callback settings.onFilter
. Questa funzione, quando l'elenco verrà creato/aggiornato, riceverà volta per volta gli elementi di settings.items
e dovrà restituire un valore booleano in base alle proprietà arbitrarie impostate: il valore false
escluderà l'elemento corrispondente.
Infine, con l'opzione settings.highlight_color
, si cambierà il colore di sfondo per gli elementi evidenziati.
Esempio 4
Una funzionalità particolarmente utile della classe ComboBox, per concludere, è quella di consentire l'autocomplete. Se esiste l'opzione settings.endpoint : 'url'
, infatti, si recupereranno gli elementi da un endpoint remoto. Il combobox, ad ogni pressione su un tasto, effettuerà una richiesta HTTP aggiungendo l'intera stringa digitata dall'utente alla fine dell'URL dell'endpoint. È bene ricordare che ogni singolo elemento dell'oggetto JSON restituito deve avere le proprietà id, name e descr o si riceverà un errore. Nel caso fosse necessario trasformare gli elementi restituiti dell'endpoint si può associare alla callback settings.onFetch
una funzione adatta allo scopo.