автозаполнение jQuery UI: очистить предыдущий поисковый запрос

в событии keydown виджета автозаполнения jQuery UI оператор case по умолчанию имеет следующий код:

default:
    // keypress is triggered before the input value is changed
    clearTimeout( self.searching );
    self.searching = setTimeout(function() {
        // only search if the value has changed
        if ( self.term != self.element.val() ) {
            self.selectedItem = null;
            self.search( null, event );
        }
    }, self.options.delay );
    break;

из того, что я вижу, шестая строка вышеуказанного кода предотвращает выполнение, если пользователь вводит одно и то же значение дважды. Это имеет смысл большую часть времени, но в моем случае это вызывает проблемы.

Я создаю приложение ajax, которое имеет фиксированный заголовок с вводом поиска вверху. Пользователь может ввести все что угодно в появится окно поиска и div с результатами поиска, соответствующими их запросу. Если пользователь вводит " abc " и нажимает на результат, он загружает соответствующую страницу через ajax и очищает поле поиска. Проблема в том, что если они снова вводят пользовательские типы в "abc", метод поиска не запускается, поскольку то, что они ввели, соответствует тому, что они искали в последний раз.

есть ли способ очистить себя.значение термина, хранящееся в виджете, когда пользователь нажимает на результат поиска? Или есть другой способ чтобы решить мою проблему без необходимости готовить мою собственную версию виджета автозаполнения?

спасибо

8 ответов


выполнение следующих сбрасывает предыдущий поисковый запрос:

 $('#AutocompleteElementID').data().autocomplete.term = null;

Если вы сделаете следующее При выборе элемента, он очистит предыдущий поисковый запрос и заставит виджет выполнить поиск, если они снова введут одно и то же значение.


к сожалению,

$(this).data().autocomplete.term = null;

не очищает поле ввода. Для этого выполняются следующие работы:

close: function(event, ui)  {
      // Close event fires when selection options closes
      $('input')[0].value = ""; // Clear the input field 
      }

если функция автозаполнения возвращает self, для вашего элемента автозаполнения вы должны просто иметь возможность вызвать

$yourAutoCompleteElement.term = null;

когда вы хотите очистить его.


это не сработало для меня:

$(this).data().autocomplete.term = null;

однако это сработало для меня в jQuery UI - v1.10.2:

$(this).data().term = null;

вы должны попробовать :

$("#AutocompleteElementID").autocomplete("instance").term = null;

Дайте мне знать, если это работает для вас


            close:          function(event, ui)
                                {
                                // Close event fires when selection options closes

                                $(this).data().autocomplete.term = null; // Clear the cached search term, make every search new
                                },

API изменились в последних версиях пользовательского интерфейса jQuery/jQuery.

правильный способ доступа к свойству на экземпляре виджета теперь:

$("#AutocompleteElementID").autocomplete("instance").term = null;

пример кода: http://jsfiddle.net/altano/sdpL17z5/

проверена работа с jQuery UI 1.11.4 и jQuery 2.2.3


после очистки текстового поля вы можете сбросить предыдущий поиск, вызвав метод автозаполнения jQuery ui "search" с пустой строкой.

$('#AutocompleteElementID').autocomplete( "search", "" );

по умолчанию существует минимальная длина поиска, которая должна быть выполнена до появления каких-либо элементов, поэтому она эффективно очищает поиск без отображения всех результатов.

http://api.jqueryui.com/autocomplete/#method-search

Это должен быть стабильный способ справиться с этой ситуацией, как со временем метод поиска не изменился.