2010-11-30 21 views
6

Quiero eliminar el spinner (imagen que muestra que se está cargando) desde el campo de texto que admite jquery ui autocompletar. Como no hay ningún evento para "no hay resultados devueltos por la fuente", no se puede activar esto.eliminar spinner de jquery ui autocompletar si no se encuentra nada

$("#q").autocomplete({ 
    source: "${createLink(mapping:'qsearch')}", 
    minLength: 2, 
    select: function(event, ui) { 
     foo(ui.item.id); 
    }, 
    search: function(event, ui) { 
     bla(); 
    } 
}); 

Respuesta

5

Adaptado de mi respuesta here, agregue el siguiente código para ejecutar después de una búsqueda es completa (incluso con 0 resultados):

var __response = $.ui.autocomplete.prototype._response; 
$.ui.autocomplete.prototype._response = function(content) { 
    __response.apply(this, [content]); 
    this.element.trigger("autocompletesearchcomplete", [content]); 
}; 

Ese código se disparará un evento (autocompletesearchcomplete), que luego se puede enlazar a :

$("#q").bind("autocompletesearchcomplete", function(event, contents) { 
    /* Remove spinner here */ 
}); 

Espero que ayude.

3

Puede editar el CSS y quitar la ruleta.

$ ("object_that_has_the_spinner"). RemoveClass ("ui-autocomplete-loading");

+0

pero la manera de desencadenar esta edición? – skurt

1

Esta es una mejora abierto conocido para futuras versiones de jQuery UI ...

http://bugs.jqueryui.com/ticket/6777

Habrá que esperar y/o utilizar una solución alternativa (como el envío de una respuesta especial por parte del servidor y manejar esto caso en el evento abierto).

+0

Este problema ya está solucionado. –

6

Si está atascado en una versión anterior de jQuery ui, la respuesta correcta es usar la clase ui-autocomplete-loading, que se agrega y elimina mientras la solicitud/respuesta está en vuelo.

3

A partir de jQuery UI v1.9 se puede hacer algo como lo siguiente:

$("#q").autocomplete({ 
    source: "${createLink(mapping:'qsearch')}", 
    select: function(event, ui) { 
    foo(ui.item.id); 
    }, 
    search: function(event, ui) { 
    $("#spinner").show(); 
    }, 
    response: function(event, ui) { 
    $("#spinner").hide(); 
    } 
}); 
Cuestiones relacionadas