it-roy-ru.com

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

В событии keydown виджета автозаполнения пользовательского интерфейса jQuery оператор 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, хранящееся в виджете, когда пользователь нажимает на результат поиска? Или есть другой способ решить мою проблему без необходимости готовить собственную версию виджета автозаполнения?

Спасибо

18
Nick Olsen

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

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

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

23
Nick Olsen

К несчастью,

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

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

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

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

$yourAutoCompleteElement.term = null;

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

1
Evan

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

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

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

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

Тебе стоит попробовать :

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

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

1
Apolo

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

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

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

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

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

0
Alan
            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
                                },
0
james burt

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

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

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

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

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

0
Trevor