Si bien la respuesta de drzone88 anterior funciona muy bien, hay un caso extremo de que me encontré con que debe ser criado: cuando se busca y no tienen resultados mostrados, el evento de cierre no se conoce. Entonces su función de desenfoque nunca será llamada. Así que me conformé con establecer la bandera cuando el contenido de la respuesta está vacío.
Mi solución también utiliza jquery.data() por lo que no tiene que arrastrar una variable en torno a:
$(".selector").autocomplete({
source: ["your values here"],
open: function(event, ui) { $(this).data("no-blur", true); },
close: function(event, ui) {
$(this).data("no-blur", false);
},
response: function(event, ui){
if(ui.content.length == 0) //when search results are empty, close is not called
$(this).data("no-blur", false);
else
$(this).data("no-blur", true); //not sure open is called again either if we re-get results
}
}).on("blur", function() {
if(!$(this).data("no-blur")) {
//do something
}
});
Como resulta, sin embargo, debido al orden en el que se denominan eventos y qué De hecho necesitaba hacer algo (desenfocar algo cuando el usuario difumina el campo sin seleccionando una opción en la lista de sugerencias), terminé configurando mi indicador noblur en verdadero al comienzo de la función de selección, y de nuevo a falso en el final de la falta de definición, como así:
$(".selector").autocomplete({
source: ["your values here"],
select: function(ui, event){
$(this).data("no-blur", true);
//do select stuff
},
}).on("blur", function() {
if(!$(this).data("no-blur")) {
//do something
}
$(this).data("no-blur", false);
});
¡Espero que esto ayude a alguien!
¿Puedes publicar tu código? Esta no es la funcionalidad predeterminada de .autocomplete() de mi experiencia. No deberías perder el foco cuando uses las teclas de flecha. –
Me has entendido mal. Las teclas de flecha funcionan bien. Es cuando empiezo a escribir, y luego ** uso el mouse y hago clic para seleccionar ** mi elección que se desenfoca. – Randomblue
Oh, lo siento, lo leí mal. ¿Qué comportamiento causa el evento desenfoque que te gustaría evitar? Solo trato de entender exactamente el comportamiento que desea. –