удалить spinner из автозаполнения jQuery ui, если ничего не найдено

Я хочу удалить счетчик (рисунок, который показывает, что он загружается) из текстового поля, которое поддерживает автозаполнение jQuery ui. Поскольку нет события для "нет результатов, возвращаемых источником" a не может вызвать это.

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

5 ответов


адаптировано из моего ответа здесь добавьте следующий код для выполнения после завершения поиска (даже с 0 результатов):

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

этот код вызовет событие (autocompletesearchcomplete), которые затем можно привязать к:

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

надеюсь, что это поможет.


Если вы застряли на старой версии jQuery ui, правильный ответ-использовать класс ui-autocomplete-loading, который добавляется и удаляется во время запроса/ответа в полете.


вы можете редактировать CSS и удалить счетчик.

$("object_that_has_the_spinner").removeClass ("ui-автозаполнение-загрузка");


С jQuery UI v1.9 вы можете сделать что-то вроде следующего:

$( "#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();
  }
});

Это известное открытое улучшение для будущих версий jQuery UI...

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

придется подождать и / или использовать обходной путь (например, отправить специальный ответ с сервера и обработать этот случай в событии open).