#javascript #jquery
Вопрос:
Я реализую автозаполнение jquery с несколькими вариантами выбора. Я нажимаю несколько запросов get и один source
внутри автозаполнения. Минимальный срок срабатывает только в первый раз. Как только я выбираю первый вариант и снова набираю символ, минимальная длина не работает. Ниже приведена моя функция:
function search() {
var $id = "#email";
jQuery.ajax({
url: url,
type: "GET",
beforeSend: function(xhr) {
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('CSRF_NONCE', 'Fetch');
},
success: function(res, status, responseHeader) {
jQuery.ajax({
url: url,
type: 'GET',
beforeSend: function(xhr) {
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.setRequestHeader('CSRF_NONCE', responseHeader.getResponseHeader("CSRF_NONCE"));
},
success: function(data) {
jQuery($id).autocomplete({
minLength: 3,
source: function(request, response) {
jQuery.ajax({
url: url,
success: function(data) {
var parsedPayload = JSON.parse(data.payload);
data = parsedPayload;
response(jQuery.map(data, function(item) {
return {
label: item.label,
value: item.value
}
}));
}
});
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split(this.value);
terms.pop();
terms.push(ui.item.value);
terms.push("");
this.value = terms.join(" ");
return false;
},
change: function(event, ui) {
console.log("Current value is: ", removeLast(this.value));
jQuery(this).val((ui.item ? ui.item.id : removeLast(this.value)));
}
});
},
error: function(data) {
console.log("Failed", data)
}
});
},
error: function() {
console.log("Failed")
}
});
}
function split(val) {
return val.split(/s /);
}
function extractLast(term) {
return split(term).pop();
}
function removeLast(term) {
var t = split(term);
t.pop();
return t;
}
Я выполняю несколько запросов, особенно в следующем блоке:
success: function(data) {
jQuery($id).autocomplete({
minLength: 3,
source: function(request, response) {
jQuery.ajax({
url: url,
success: function(data) {
var parsedPayload = JSON.parse(data.payload);
data = parsedPayload;
response(jQuery.map(data, function(item) {
return {
label: item.label,
value: item.value
}
}));
}
});
},
focus: function() {
return false;
},
select: function(event, ui) {
var terms = split(this.value);
terms.pop();
terms.push(ui.item.value);
terms.push("");
this.value = terms.join(" ");
return false;
},
change: function(event, ui) {
console.log("Current value is: ", removeLast(this.value));
jQuery(this).val((ui.item ? ui.item.id : removeLast(this.value)));
}
});
},
Заранее спасибо.