Нет ли способа отменить ajax-вызов автозаполнения jQuery, когда ввод теряет фокус? Я пришел к выводу, что мне нужно а) уничтожить автозаполнение (и удалить класс 'ui-autocomplete-loading') на размытие и б) создать автозаполнение на фокусе. Мой код, который отлично работает, чтобы сделать это:
$('#myinput').focus(function(){
$('#myinput').autocomplete({
delay: 250,
source: function(request, response) {
$.ajax({
url: "cfc/myfunctions.cfc?method=lookup&returnformat=json",
dataType: "json",
data: {
search: request.term,
maxRows: 20
},
success: function(data) {
response(data);
}
})
},
change: function(event, ui) {
if (!ui.item) {
$(this).val('');
}
}
});
});
// necessary to cancel autocompletes if the user leaves the input or closes the filter
$('#myinput').blur(function(){
$(this).removeClass('ui-autocomplete-loading').autocomplete('destroy');
});
Это имеет ожидаемое поведение отмены автозаполнения (и удаления значка loading.gif) при размытии и включения автозаполнения, когда ввод получает фокус.
Что странно, когда пользователь делает это, пока автозаполнение занимает много времени, чтобы ответить. В этом случае у меня есть автозаполнение, которое иногда занимает 20 секунд, чтобы ответить (да, я знаю, это другая проблема). Если пользователь вводит значение, щелкает где-то еще и возвращается к повторному удару при автозаполнении, выполняется новый вызов, отображается значок новой загрузки, а первый вызов ajax все еще работает в фоновом режиме. Когда первый вызов ajax завершается, даже если этот экземпляр автозаполнения был уничтожен, обратный вызов удаляет класс 'ui-autocomplete-loading' экземпляра CURRENT, и значок исчезает, даже если текущее автозаполнение все еще остается позади сцены.
Нет ли другого способа отменить автозаполнение или, что еще лучше, отменить базовый вызов ajax?