2011-08-17 11 views
7

Ejemplo código aquí: http://jsbin.com/etaziy (usando http://jqueryui.com/demos/autocomplete/)jQuery UI .autocomplete() no disparar, si misma letra introducida después de desenfoque()

Si escribe en un 'j' a obtener los 3 nombres, 'John' ' Jack 'y' Joe '. Si luego se borra, borro la entrada, solo haciendo las entradas val (''). Entonces, si vuelves a la entrada y escribes una 'j' de nuevo, ¿no pasa nada? No es hasta que escribe una segunda letra coincidente que se muestra la ventana emergente.

Mi ejemplo puede parecer un poco extraño, pero esencialmente esta es una versión realmente reducida de lo que estoy trabajando. Necesito borrar la entrada después de un desenfoque(), y borrarlo después de hacer una selección. Hacer esto hace que las selecciones posteriores parezcan con errores.

Estoy pensando en parte que esta es la funcionalidad prevista, pero para mi propósito, no es lo que quiero. Realmente necesito la ventana emergente con la lista para mostrar tan pronto como se escribe una letra.

Saludos.

Respuesta

10

El problema es que la autocompletar realiza un seguimiento interno del valor con el que coincide, por lo que cuando primero escribe j establece este valor interno en 'j' y luego no se restablece a la cadena vacía cuando cambió la entrada para estar vacía.

Después de ver la fuente de autocompletar no pude averiguar cómo acceder directamente a la variable interna, pero puede forzar la autocompletar para que la actualice ejecutando otra búsqueda una vez que haya cambiado la entrada para que sea vacío (y con una longitud de cero no hará la búsqueda).

$(function() { 
    $("#search").autocomplete({ 
       source: data, 
       change: function() { // Triggered when the field is blurred, if the value has changed; ui.item refers to the selected item. 
         $("#search").val(""); 
         $("#search").autocomplete("search", ""); //THIS IS THE NEW LINE THAT MAKES IT HAPPY 
       } 
     }); 
}); 
4

basta con sustituir la línea 98 en jquery.ui.autocomplete.js

if (self.term != self.element.val()) { // only search if the value has changed 

con if(true){

Cuestiones relacionadas