У меня есть поле select2, которое извлекает данные из удаленного api. Я могу заставить это работать. То, что я пытаюсь сделать, это изменить удаленный url на основе того, что пользователь набрал. Если первые две буквы напечатаны, например, "AA", то поиск с использованием URL-адреса, а когда первые два символа "88", выполните поиск с использованием другого URL-адреса.
Это мой код:
this.selector.select2({
minimumInputLength: 2,
ajax: {
url: function(param){return 'http://localhost:3000/suggestions?&'},
dataType: 'json' ,
data: function (params) {
var query = {
search: params.term,
}
return query;
},
processResults: function(data) {
var results = [];
$.each(data, function (index, search) {
results.push({
id: search.id,
text: search.val
});
});
return {
"results":results
};
},
},
width: 'resolve',
});
Я посмотрел, но не могу найти событие, которое запускается при вводе (поиске).
Согласно документам аргумент params, переданный на обратный вызов url, такой же, как и в обратном вызове данных. Таким образом, вы можете переписать свой код как:
this.selector.select2({
minimumInputLength: 2,
ajax: {
url: function (params) {
var firstTwoLetters = params.term.slice(0, 2);
if (firstTwoLetters == '88') {
return 'some url';
} else if (firstTwoLetters == 'AA') {
return 'another url'
} else {
return 'http://localhost:3000/suggestions?&'
}
},
dataType: 'json',
data: function (params) {
var query = {
search: params.term,
}
return query;
},
processResults: function (data) {
var results = [];
$.each(data, function (index, search) {
results.push({
id: search.id,
text: search.val
});
});
return {
"results": results
};
},
},
width: 'resolve',
});
Надеюсь, я правильно понял ваш последний запрос.
Событие oninput
происходит по мере ввода.
примечание: я бы скорее прокомментировал это и не использовал ответ, однако у меня меньше 50 реп.