2012-05-05 10 views
9

¿Cómo habilito la coincidencia exacta desde el inicio de la cadena utilizando jquery autocompletar con la entrada de una matriz simple?autocompletar coincidencia exacta desde el inicio utilizando jquery autocompletar desde matriz simple

si tengo la siguiente en una matriz:

  • inteligente
  • oversmart
  • smartland
  • undersmart
  • Verysmart

Y si estoy escribiendo "SMA. .. "en la entrada de texto, se me debe mostrar solo smart y smartland, no el otros.

+0

posible duplicado de [jQuery Autocompletar plug-in de configuración de búsqueda] (http://stackoverflow.com/questions/2382497/jquery-autocomplete-plug-in-search-configuration) – j08691

Respuesta

12

Solo necesita modificar el parámetro fuente como una función que se adapte a sus necesidades. De esta manera:

http://jsfiddle.net/UKgD6/


Actualización: Adición de código para responder:

var acList = ['smart', 'oversmart', 'smartland', 'undersmart', 'verysmart']; 
$('#ac').autocomplete({ 
    source: function (request, response) { 
     var matches = $.map(acList, function (acItem) { 
      if (acItem.toUpperCase().indexOf(request.term.toUpperCase()) === 0) { 
       return acItem; 
      } 
     }); 
     response(matches); 
    } 
}); 
+0

Impresionante ... que funciona como un amuleto, exactamente lo que estaba buscando con jquery autocompletar - ¡gracias! –

1

Puede usar expresiones regulares para unir la subcadena ingresada con los valores en la matriz que tiene.

0

jQuery tiene demasiados plug-ins. Basta con rociar un poco de expresiones regulares en él y escribir algo como esto (no he probado, pero he hecho cosas similares antes):

$('#someTextInput').keyup(function(){ 
    var regExMatch = new RegEx('^' + $(this).val()); 
    $_LIs = $('#someUl li'); 
    $_LIs.hide(); 
    $_LIs.each(function(){ 
     if(this.innerText.match(regExMatch)) { $(this).show(); } 
    }); 
}); 

puede quitar el '^' + en los parámetros new RegEx para restaurar el comportamiento que Estoy describiendo como problemático. '^' significa el comienzo de una selección de línea/cadena así que 's' no coincidirá a menos que esté al principio.

+0

Erik - gracias, lo tendré en cuenta y retocaré para ver cómo encaja dentro de un autocompletar ... –

0

Esto ha cambiado desde que se aceptó la respuesta anterior. Ahora hay una opción lookupFilter para hacer esto y es mucho más simple. De https://stackoverflow.com/a/23239873/1204434, sólo tiene que añadir esto a su lista de opciones:

lookupFilter: function (suggestion, originalQuery, queryLowerCase) { 
       return suggestion.value.toLowerCase().indexOf(queryLowerCase) === 0; 
      }, 
2

La manera de hacer esto está documentado en http://api.jqueryui.com/autocomplete/

<script> 
    var tags = [ "c++", "java", "php", "coldfusion", "javascript", "asp", "ruby" ]; 
    $("#autocomplete").autocomplete({ 
     source: function(request, response) { 
       var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i"); 
       response($.grep(tags, function(item){ 
        return matcher.test(item); 
       })); 
      } 
    }); 
</script> 
Cuestiones relacionadas