автозаполнение 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
Это должен быть стабильный способ справиться с этой ситуацией, как со временем метод поиска не изменился.