Elementi e stili per la creazione di input con autocompletamento.
Esempio di autocompletamento
Il completamento automatico è un componente che aiuta gli utenti a scegliere le risposte da un elenco fornito.
Per la creazione del componente, è stato utilizzato il plugin Accessible autocomplete.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<divclass="form-group"><labelfor="accessibleAutocomplete">Regione</label><divid="accessibleAutocompleteWrapper"class="autocomplete-wrapper"></div></div><script>document.addEventListener('DOMContentLoaded',function (){constitalianRegions=["Abruzzo","Basilicata","Calabria","Campania","Emilia Romagna","Friuli Venezia Giulia","Lazio","Liguria","Lombardia","Marche","Molise","Piemonte","Puglia","Sardegna","Sicilia","Toscana","Trentino Alto Adige","Umbria","Valle d’Aosta","Veneto"];constselectElement=document.querySelector('#accessibleAutocompleteWrapper');constselectAutocomplete=newbootstrap.SelectAutocomplete(selectElement,{id:'accessibleAutocomplete',name:'regioni',source:italianRegions});})</script>
Cambiare i valori dinamicamente
In questo esempio viene mostrato come popolare il componente con dati che
cambiano a fronte di un altro input, ad esempio il valore di un altro elemento
di un form (come una select nell’esempio che segue).
Per far fronte a questa esigenza è sufficiente passare come opzione source
una funzione per filtrare i dati e popolare il componente
(Tutte le opzioni disponibili del componente).
<divclass="row"><divclass="col-12"><divclass="form-group"><divclass="select-wrapper"><labelfor="category">Categoria alimento</label><selectid="category"name="category"><optionvalue="frutta"selected>Frutta</option><optionvalue="verdura">Verdura</option></select></div></div></div><divclass="col-12"><divclass="form-group"><labelfor="productAutocomplete">Alimento</label><divid="productAutocompleteWrapper"class="autocomplete-wrapper"></div></div></div><script>constform_data={'frutta':['Mela','Pera','Melone','Banana',],'verdura':['Carota','Zucchina','Melanzana','Carciofo',],}document.addEventListener('DOMContentLoaded',function (){constcategorySelect=document.getElementById("category");constselectWrapperElement=document.getElementById("productAutocompleteWrapper");constselectAutocomplete=newbootstrap.SelectAutocomplete(selectWrapperElement,{id:'productAutocomplete',name:'prodotto',source:(query,populateResults)=>{constresults=form_data[categorySelect.value]constfilteredResults=results.filter(result=>result.toLowerCase().indexOf(query.toLowerCase())!==-1)populateResults(filteredResults)}});// Facoltativo: se si vuole cancellare l'elemento al cambio del filtrocategorySelect.addEventListener('change',(event)=>{document.getElementById("productAutocomplete").value='';});})</script></div>
<divclass="row"><divclass="col-12"><divclass="form-group"><divclass="select-wrapper"><labelfor="regione">Regione</label><selectid="regione"name="regione"><optionvalue="Abruzzo">Abruzzo</option><optionvalue="Basilicata">Basilicata</option><optionvalue="Calabria">Calabria</option><optionvalue="Campania">Campania</option><optionvalue="Emilia Romagna">Emilia Romagna</option><optionvalue="Friuli Venezia Giulia">Friuli Venezia Giulia</option><optionvalue="Lazio">Lazio</option><optionvalue="Liguria">Liguria</option><optionvalue="Lombardia">Lombardia</option><optionvalue="Marche">Marche</option><optionvalue="Molise">Molise</option><optionvalue="Piemonte">Piemonte</option><optionvalue="Puglia">Puglia</option><optionvalue="Sardegna">Sardegna</option><optionvalue="Sicilia">Sicilia</option><optionvalue="Toscana">Toscana</option><optionvalue="Trentino Alto Adige">Trentino Alto Adige</option><optionvalue="Umbria">Umbria</option><optionvalue="Valle d’Aosta">Valle d’Aosta</option><optionvalue="Veneto">Veneto</option></select></div></div></div><divclass="col-12"><divclass="form-group"><labelfor="comuniAutocomplete">Comune</label><divid="comuniAutocompleteWrapper"class="autocomplete-wrapper"></div></div></div><script>document.addEventListener('DOMContentLoaded',asyncfunction (){constitalianRegions=["Abruzzo","Basilicata","Calabria","Campania","Emilia Romagna","Friuli Venezia Giulia","Lazio","Liguria","Lombardia","Marche","Molise","Piemonte","Puglia","Sardegna","Sicilia","Toscana","Trentino Alto Adige","Umbria","Valle d’Aosta","Veneto"];constdata={}italianRegions.forEach(region=>{data[region]=[]})constcomuniJson=await (awaitfetch('/bootstrap-italia/docs/esempi/form/comuni.json')).json();comuniJson.forEach(comune=>data[comune.regione].push(comune.comune))constregioniSelect=document.getElementById("regione");constselectWrapperElement=document.getElementById("comuniAutocompleteWrapper");constselectAutocomplete=newbootstrap.SelectAutocomplete(selectWrapperElement,{id:'comuniAutocomplete',name:'comuni',source:(query,populateResults)=>{constresults=data[regioniSelect.value]constfilteredResults=results.filter(result=>result.toLowerCase().indexOf(query.toLowerCase())!==-1)populateResults(filteredResults)}});regioniSelect.addEventListener('change',(event)=>{document.getElementById("comuniAutocomplete").value='';});})</script></div>
Validazione
Per la validazione del campo con autocompletamento, si consiglia di utilizzare
il plugin Just Validate come da guida.
È possibile testare la validazione del campo con autocompletamento sulla
pagina di esempio validazione.
Quando l’utente seleziona un valore dalla tendinda di Autocomplete occorre
richiamare nuovamente la funzione di validazione. Questa chiamata può essere
effettuata all’interno del metodo onConfirm che viene passato in configurazione
e verrà chiamata ogni volta che l’utente seleziona un opzione.
Ad esempio con JustValidate occorrerà istanziare il componente in questo modo
Il campo verrà validato così anche nel caso in cui l’utente seleziona un’opzione.
Nel caso in cui è stato impostato che JustValidate validi il form solo dopo la
submit occorre controllare il suo stato
Nell’esempio seguente si può provare questo comportamento (si noti che tra le
configurazioni è stato passato anche minLength: 3, vista la grande mole di dati
questa opzione impedirà la visualizzazione dei suggerimenti se vengono digitati
meno di 3 caratteri)
<div><formid="justValidate"><divclass="row"><divclass="col-12"><divclass="form-group"><labelfor="comuneJVAutocomplete">Comune di residenza</label><divid="comuneJVAutocompleteWrapper"class="autocomplete-wrapper"></div></div></div></div><divclass="row"><divclass="col-12"><buttonclass="btn btn-primary mt-3"type="submit"id="submitform">Invia form</button></div></div></form><script>document.addEventListener('DOMContentLoaded',asyncfunction (){constvalidate=newbootstrap.FormValidate('#justValidate',{errorFieldCssClass:'is-invalid',errorLabelCssClass:'form-feedback',errorLabelStyle:'',focusInvalidField:false,})constcomuniJson=await (awaitfetch('/bootstrap-italia/docs/esempi/form/comuni.json')).json();constcomuni=comuniJson.map(comune=>comune.comune)constselectAutocompleteWrapper=document.querySelector('#comuneJVAutocompleteWrapper');constselectAutocomplete=newbootstrap.SelectAutocomplete(selectAutocompleteWrapper,{source:comuni,id:'comuneJVAutocomplete',name:'comuni',minLength:3,onConfirm:()=>{if (!validate.isSubmitted&&!validate.validateBeforeSubmitting)returnvalidate.revalidateField('#comuneJVAutocomplete')}});validate.addField('#comuneJVAutocomplete',[{rule:'required',errorMessage:'Questo campo è richiesto',},{validator:(value)=>{returncomuni.includes(value);},errorMessage:'Scegli una città valida',},]).onSuccess((event)=>{// Inserire qua l'azione nel caso di input valido, ad es.// document.forms['justValidate'].submit()})})</script></div>
Attivazione tramite codice
È possibile abilitare l’autocomplete manualmente utilizzando l’oggetto SelectAutocomplete.
Sorgente di dati dell'autocomplete. Se "source è una funzione, gli argomenti sono: (query: string, populateResults: Funzione): "query" è ciò che viene digitato nel campo di input, che richiamerà la funzione "populateResults" in modo sincrono con l'array di risultati da visualizzare nel menu (esempi sopra).
id
string
-
Id dell'elemento input che verrà generato dall' Autocomplete.
name
string
input-autocomplete
Nome del campo di input di completamento automatico, da utilizzare con un form padre.
minLength
number
0
Questa opzione impedisce la visualizzazione dei suggerimenti se vengono digitati meno di N caratteri.
defaultValue
string
-
Valore di default inserito nell'input.
required
boolean
false
Il campo di input verrà renderizzato con un attributo obbligatorio.
onConfirm
function
{}
Questa funzione viene chiamata quando l'utente conferma un'opzione, con l'opzione che ha confermato come argomento (si vedano gli esempi precedenti).
Metodi
Metodo
Descrizione
getInstance
Metodo statico che consente di ottenere l'istanza di avviso associata a un elemento DOM, è possibile utilizzarlo in questo modo: SelectAutocomplete.getInstance(domElement).
getOrCreateInstance
Metodo statico che restituisce un'istanza di avviso associata a un elemento DOM o ne crea una nuova nel caso in cui non fosse stata inizializzata. Puoi utilizzarla in questo modo: SelectAutocomplete.getOrCreateInstance(element).
dispose
Rimuove la funzionalità SelectAutocomplete.
Internazionalizzazione (i18n)
Il componente è internazionalizzabile tramite alcuni parametri della configurazione.
La configurazione per Bootstrap Italia è stata settata in italiano.
Per maggiori dettagli sulle stringhe che possono essere passate al componente
fare riferimento alla guida ufficiale.
Breaking change
Nuova modalità di utilizzo del componente Autocomplete via codice.