Подтвердить что ты не робот

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', метод поиска не запускается, как то, что они набрали, в соответствии с тем, что они искали в последний раз.

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

К сожалению,

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

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

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

Ответ 3

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

$yourAutoCompleteElement.term = null;

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

Ответ 4

Этот DID НЕ работает для меня:

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

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

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

Ответ 5

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

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

Сообщите мне, если это сработает для вас

Ответ 6

            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
                                },

Ответ 7

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

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

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

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

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

Ответ 8

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

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

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

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

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