Вызов Autocomplete по значению в input
С JS не шибко знаком, хуже новичка. Но...
Суть такова: у меня есть два input'а(input1 и input2). К input1 подвязан JQuery Autocomplete, данные подгружаются из JSON, всё работает и проблем нет. Код: var data = []; $.getJSON('путь_к_файлу', function(result) { $.each(result.entries,function(index,val) { data.push(val); }); }); $(function(){ $("#id").autocomplete ({ source: data, minLength: 3 }) .focus(function() { $(this).autocomplete('search', $(this).val()) }); }); JSON имеет вид: { "entries": [ {"label":"text1"}, {"label":"text2"}, {"label":"text3"} ] } Как сделать так, чтобы в input2 подгружался другой JSON с Autocomplet'ом, если значение в первом, например, text2? Либо, как можно разумно модифицировать код и JSON с закосом на будущее, если вдруг понадобится проделывать такую же фигню, когда в input1 будет выбран text1 или text2? |
Goopy,
должно быть, как-то так ... var data = []; $.getJSON('путь_к_файлу', function(result) { $.each(result.entries, function(index, val) { data.push(val); }); }); $(function() { $("#id").autocomplete({ source: data, minLength: 3, select: function(event, ui) { $("input2").autocomplete({ source: function(request, response) { $.ajax({ url: "путь_к_файлу", dataType: "jsonp", data: { term: ui.item.value }, success: function(data) { response(data); } }); }, minLength: 3 }); } }) .focus(function() { $(this).autocomplete('search', $(this).val()) }); }); |
рони,
Все равно остается риск, что данные в getJSON придут позже, чем сработает DOMContentLoaded и они понадобятся а source: data |
рони, благодарю за наводку)
voraa, да, не совсем нормально))) данные не приходят... буду думать, еще надо условие добавить, чтобы в input2 подгружался JSON, только если значение в Input1 = text3. |
Цитата:
function getJSON() { return new Promise(res => { const data = []; $.getJSON('путь_к_файлу', function(result) { $.each(result.entries, function(index, val) { data.push(val); }); }); res(data); }) } const prom = getJson(); $(function() { prom.then(data => { $("#id").autocomplete({ source: data, minLength: 3, select: function(event, ui) { $("input2").autocomplete({ source: function(request, response) { $.ajax({ url: "путь_к_файлу", dataType: "jsonp", data: { term: ui.item.value }, success: function(data) { response(data); } }); }, minLength: 3 }); } }) .focus(function() { $(this).autocomplete('search', $(this).val()) }); }) }); |
второй Json не подгружается, в консоли, вместо него грузится первый Json
|
Ну так пути же разные должны быть у первого и второго. Я же не знаю ваши пути.
|
Я просто взял код рони, что бы показать как это сделать с промисом.
Там сделано Цитата:
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 17:03. |