2011-01-05 15 views
33

Estoy usando una UQ de JQuery autocompletada. Estoy especificando la longitud mínima. Si especifico minLength:2, necesito escribir 2 caracteres antes de que el servicio se dispare. Si especifico minLength:1, entonces solo necesito ingresar un carácter antes de que se active el servicio de origen.Jquery UI autocompletar; minLength: 0 número

Sin embargo, cuando especifico minLength:0, todavía necesito escribir un caracter. Entonces, cuál es el punto de 0? ¿Cómo es diferente de 1? El comportamiento esperado y deseado sería disparar tan pronto como la entrada tenga enfoque ...?

Ideas?

Actualización: Para la solución de la mayor parte de Karim a continuación las obras, sin embargo, al hacer clic en la entrada de las opciones vienen y cuando uno se hace clic en la fuente se vuelve a enviar el cadena vacía en lugar de la nueva opción que era solo se ha seleccionado, por lo que las opciones de autocompletar que aparecen después de seleccionar una opción son más que igual que si la casilla hubiera estado vacía.

+0

¿Cuál es el comportamiento esperado de todos modos cuando se tiene 'minLength: 0'? – kralco626

+0

Básicamente, ¿desea que aparezcan todos los resultados disponibles cuando se enfoca en el campo de autocompletar? – karim79

+0

Bueno, no exactamente, pero sí. ¿Te confundí? Quiero que todos los resultados vuelvan a aparecer en el servicio. Sin embargo, esto puede o no ser todos los resultados posibles. Por ejemplo, si mi servicio clasifica todos los resultados restantes posibles y muestra solo los diez primeros, No mostraría todos los resultados posibles, pero, sí, el autocompletar mostraría todos los resultados devueltos por el servicio web ... Espero que tenga sentido ... :) – kralco626

Respuesta

45

Mira la documentación search método:

activa un evento de búsqueda, que, cuando de datos está disponible, entonces se mostrará las sugerencias; puede ser utilizado por un botón de tipo de cuadro de selección para abrir las sugerencias al hacer clic. Si no se especifica ningún argumento de valor , se utiliza el valor actual de la entrada . Puede llamarse con una cadena vacía y minLength: 0 para mostrar todos los elementos.

var source = ['One', 'Two', 'Three', 'Four']; 
 

 
var firstVal = source[0]; 
 

 
$("input#autocomplete").autocomplete({ 
 
    minLength: 0, 
 
    source: source, 
 
}).focus(function() { 
 
    $(this).autocomplete("search", $(this).val()); 
 
});
.ui-menu-item{ 
 
    background : rgb(215, 215, 215);; 
 
    border : 1px solid white; 
 
    list-style-type: none; 
 
    cursor : pointer; 
 
} 
 

 
.ui-menu-item:hover{ 
 
    background : rgb(200, 200, 200); 
 
} 
 

 

 
.ui-autocomplete{ 
 
    padding-left:0; 
 
    margin-top : 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.js"></script> 
 
<input id="autocomplete"/>&nbsp;<input id="submit" type="submit"/>

+0

algo así como $ (" # myAC "). onFocus (" búsqueda " , "")? - EDITAR: supongo que tu edición responde esta pregunta :) ¡Gracias! – kralco626

+0

@ kralco626 - simplemente encadena un controlador '.focus' a la inicialización de autocompletar, como en el ejemplo anterior y la demostración. – karim79

+0

@karim - ¿tienes alguna idea de por qué esto no se implementa automáticamente cuando 'minLength: 0'? ¿Qué otro significado que esto puede significar 'mineLength: 0' posiblemente significa? Quiero decir, ¿qué más podría querer que el programador suceda que Jquery no implementaría esto por defecto? – kralco626

0

el menú sugerencia aparece por segunda vez porque al hacer clic en un elemento de menú sugerencia provoca cuadro de texto para recuperar el foco, sin embargo, el valor de texto no se actualiza cuando el foco se dispara nuevamente. Después de que el cuadro de texto recupera el foco, se activa el menú de sugerencias.

no sé cómo podríamos solucionar este problema, pero hazme saber si alguno de ustedes se enfrentan a la problema similar

+0

La respuesta de rasx hace bien el trabajo – Kodak

3

que tenía el mismo problema y lo resolvió de esta manera. Creo que el código a continuación deja mucho más claro cuál es el texto que se envía al servicio de autocompletado cuando el campo obtiene el foco. En particular, está claro por qué funciona cuando el campo ya contiene algo.

$(function() { 
$("input#autocomplete").autocomplete({ 
     source: "completion.html", 
     minLength: 0, 
     select: function(event, ui) {} 
    }); 
}); 
$("input#autocomplete").focus(function() { 
    $(this).autocomplete("search", $(this).val()); 
}); 
1

¡Esto realmente funciona! Probado en IE, Firefox

$("input#autocomplete").autocomplete({ 
minLength: 0, 
source: source, 
}).focus(function() { 
     setTimeout("if ($('#input#autocomplete').val().length == 0) $('#input#autocomplete').autocomplete(\"search\", \"\"); ",1); 
    }); 
5

entiendo por qué a través del experimento la respuesta aceptada (I arriba-voté) se puede considerar poco incompleta. He añadido un poco de la intención de hacer que el combo-UX más similar a una caja:

$('#Carrier').autocomplete(
{ 
    source: '@Url.Action("AutocompleteCarrier", "Client")', 
    minLength: 0, 
    select: function (event, data) { 
     $(this).autocomplete('disable'); 
    } 
}) 
.blur(function(){ 
    $(this).autocomplete('enable'); 
}) 
.focus(function() { 
    $(this).autocomplete('search', ''); 
}); 
+1

Sí, esta es una solución imprescindible para Internet Explorer. – Xdg

1

que tenían el mismo problema y me dieron la forma de solucionar este problema.

El problema es que cuando una opción se ha seleccionado la entrada se centrará, esto ejecutará search sin ningún tipo de filtro y mostrará el autocomplete nuevo.

Este problema no ocurre cuando selecciona por teclado porque el input ya está enfocado, por lo que el código que está dentro de focus no se ejecutará nuevamente.

Por lo tanto, para solucionar este problema debemos saber cuándo se desencadena el enfoque por cualquier evento de mouse/keyboar.

jQuery("input#autocomplete").focus(function(e) { 
    if(!e.isTrigger) { 
     jQuery(this).autocomplete("search", ""); 
    } 
    e.stopPropagation(); 
}); 

e.isTrigger es utilizado por jQuery de identificar cuando event se ha disparado de forma automática o por el usuario.

working demo

Cuestiones relacionadas