AutoComplete-devbridge: обновить параметры при изменении из другого поля автозаполнения

Я использую этот плагин:

https://github.com/devbridge/jQuery-Autocomplete

То, что я хочу, что когда я выбрал вариант с именем текстового поля я могу получить это значение и поместить его в качестве параметра в текстовом поле адреса, где параметры в поле адреса ограничиваются только тогда, когда имя существует в этом адресе.

То же самое происходит, когда я выбрал опцию из поля адреса, параметры в поле имени ограничены только именами людей, которые живут по этому адресу.

Вот мой код:

$(document).ready(function(){
 var name = '';
 var add = '';

 $('#name').change(function() {
 name = $('#name').val();
 });

 $('#add').change(function() {
 add = $('#add').val();
 });

 $('#name').devbridgeAutocomplete({
 serviceUrl: 'search/name',
 minChar: 2,
 params: {add: add},
 onSelect : function(suggestion) {
 $('#name').val(suggestion.value);
 }
 });

 $('#name').devbridgeAutocomplete({
 serviceUrl: 'search/address',
 minChar: 2,
 params: {name: name},
 onSelect : function(suggestion) {
 $('#name').val(suggestion.value);
 }
 });
});

Я не знаю, почему он не работает, я сделал это правильно или я делаю все это неправильно? Пожалуйста помоги!

Кто-нибудь еще имел эту проблему или знал о решении?

2 ответа

Поскольку ваши переменные являются строками, они передаются как значения, а не ссылки. Когда данные в "#add" изменяются, вам необходимо обновить параметры на экземпляре autocomplete ввода "#name":

$('#add').change(function() {
 var add = $('#add').val();
 $('#name').devbridgeAutocomplete().setOptions({
 params: { add: add }
 });
});


хотя это вопрос немного назад, я столкнулся с этой проблемой, поэтому я размещаю свое решение здесь, чтобы помочь любому, кому это может понадобиться для дополнительных параметров Devbridge

$('#search').autocomplete({
 serviceUrl: "search/name",
 type: "POST",
 dataType: "json",
 paramName: "name",
 params: {
 middle: function(){
 return $("#middle").val();
 },
 last: function(){
 return $("#last").val();
 },
 //no value return for using last:$("#last").val()
 },
 minChars: 3,
 showNoSuggestionNotice: true,
 noSuggestionNotice: "No results found",
 transformResult: function(response) {
 if (response){
 return {
 suggestions: $.map(response.results, function(dataItem) {
 return { value: dataItem.name.trim(), data: dataItem.id, object: dataItem };
 })
 };
 }
 else{
 return {
 suggestions: []
 };
 }
 },
 onSelect: function(suggestion){
 //suggestion.object contain all values pass thru, no need to call again
 },
});

licensed under cc by-sa 3.0 with attribution.