jQuery UI L’uso del completamento automatico inizia con

Sto utilizzando il completamento automatico dell’interfaccia utente jQuery con un’origine dati locale ( source: myArray ). Voglio che la funzione di completamento automatico proponga solo i risultati che iniziano con la stringa immessa invece che la ricerca della distinzione tra maiuscole e minuscole predefinita. C’è una soluzione semplice per questo o devo fornire la mia ricerca personalizzata / callback sorgente?

Guarda questo:

Parola iniziale partita:

http://blog.miroslavpopovic.com/jqueryui-autocomplete-filter-words-starting-with-term

Sostituisce il metodo di filtro di completamento automatico. Io uso questo e funziona bene.

 // Overrides the default autocomplete filter function to search only from the beginning of the string $.ui.autocomplete.filter = function (array, term) { var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i"); return $.grep(array, function (value) { return matcher.test(value.label || value.value || value); }); }; 

Parola partita:

La partita inizia con qualsiasi parola nella stringa.

ad es. “LHR londra” corrisponde a “londra”

 var matcher = new RegExp("\\b" + $.ui.autocomplete.escapeRegex(term), "i"); 

\ b asserire la posizione al limite di una parola (^ \ w | \ w $ | \ W \ w | \ w \ W)

Attualmente l’ho fatto in questo modo, non sono sicuro se c’è una soluzione migliore:

 source: function(request, response) { var filteredArray = $.map(orignalArray, function(item) { if( item.value.startsWith(request.term)){ return item; } else{ return null; } }); response(filteredArray); }, 

Questo approccio ha anche permesso di imporre un limite (ad esempio 10 articoli) sulla quantità di articoli da mostrare.

Sono entrato nel codice di Jqueryui e l’ho acceso lì.

Se guardi nella sezione di completamento automatico, vedrai la seguente riga:

 filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i") 

Modificalo al seguente (attenzione, questo è un cambiamento globale):

 filter:function(a,b){var g=new RegExp("^" + d.ui.autocomplete.escapeRegex(b),"i") 

Ecco un modo leggermente diverso di fare ricerca sensibile al maiuscolo / minuscolo. Notare la mancanza di “i” nella creazione dell’espressione regolare nel secondo esempio, che è ciò che causa la mancanza di distinzione tra maiuscole e minuscole nell’implementazione predefinita.

maiuscole e minuscole:

  $('#elem').autocomplete({ source: array }); 

che tiene conto del maiuscolo o minuscolo:

  $('#elem').autocomplete({ source: function(request, response) { var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term, "")); var data = $.grep( array, function(value) { return matcher.test( value.label || value.value || value ); }); response(data); } }); 

puoi usare Stesso modo negli esempi di completamento automatico dell’interfaccia utente di Jquery

  

O un altro modo con l’utilizzo del metodo $.map non $.grep

  
 source: function( request, response ) { var t = jQuery.grep(t, function(a){ var patt = new RegExp("^" + request.term, "i"); return (a.match(patt)); }); response(t); },