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?
Спасибо
Ответы
Ответ 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