Два адреса
Здравствуйте!
Подскажите пожалуйста - как реализовать схему "откуда" - "куда" (адреса) не дублируя скрипт? На данный момент дублирую скрипт целиком, т.е.: <script type="text/javascript"></script> + <script type="text/javascript"></script>
Пример:
$("#otkuda").suggestions({ serviceUrl: "https://dadata.ru/api/v2", token: "***", type: "ADDRESS", onSelect: showSelected }); function join(arr) { var separator = arguments.length > 1 ? arguments[1] : ', '; return arr.filter(function(n) { return n; }).join(separator); } function showSelected(suggestion) { var otkuda = suggestion.data; $('#index1').val(otkuda.postal_code); $('#region').val(join([ join([ otkuda.region_type, otkuda.region ], ' '), join([ otkuda.area_type, otkuda.area ], ' ') ])); $('#city').val(join([ join([ otkuda.city_type, otkuda.city ], ' '), join([ otkuda.settlement_type, otkuda.settlement ], ' ') ])); $('#street').val(join([ otkuda.street_type, otkuda.street ], ' ')); $('#house').val(join([ join([ otkuda.house_type, otkuda.house ], ' '), join([ otkuda.block_type, otkuda.block ], ' ') ])); $('#flat').val(join([ otkuda.flat_type, otkuda.flat ], ' ')); } $("#kuda").suggestions({ serviceUrl: "https://dadata.ru/api/v2", token: "***", type: "ADDRESS", onSelect: showSelected }); function join(arr) { var separator = arguments.length > 1 ? arguments[1] : ', '; return arr.filter(function(n) { return n; }).join(separator); } function showSelected(suggestion) { var kuda = suggestion.data; $('#index2').val(kuda.postal_code); $('#region1').val(join([ join([ kuda.region_type, kuda.region ], ' '), join([ kuda.area_type, kuda.area ], ' ') ])); $('#city1').val(join([ join([ kuda.city_type, kuda.city ], ' '), join([ kuda.settlement_type, kuda.settlement ], ' ') ])); $('#street1').val(join([ kuda.street_type, kuda.street ], ' ')); $('#house1').val(join([ join([ kuda.house_type, kuda.house ], ' '), join([ kuda.block_type, kuda.block ], ' ') ])); $('#flat1').val(join([ kuda.flat_type, kuda.flat ], ' ')); }
Ответ
Примерно так:
function join(arr) { var separator = arguments.length > 1 ? arguments[1] : ', '; return arr.filter(function(n) { return n; }).join(separator); } function enableSuggestions(ui) { ui.address.suggestions({ serviceUrl: "https://dadata.ru/api/v2", token: "***", type: "ADDRESS", onSelect: showSelected }); function showSelected(suggestion) { var address = suggestion.data; ui.index.val(address.postal_code); ui.region.val(join([ join([address.region_type, address.region ], ' '), join([address.area_type, address.area ], ' ') ])); ui.city.val(join([ join([address.city_type, address.city ], ' '), join([address.settlement_type, address.settlement ], ' ') ])); ui.street.val(join([address.street_type, address.street ], ' ')); ui.house.val(join([ join([address.house_type, address.house ], ' '), join([address.block_type, address.block ], ' ') ])); ui.flat.val(join([address.flat_type, address.flat ], ' ')); } } enableSuggestions({ address: $("#otkuda"), index: $('#index1'), region: $('#region'), city: $('#city'), street: $('#street'), house: $('#house'), flat: $('#flat') });
Спасибо!
Если я правильно понял, то:
enableSuggestions({
address: $("#otkuda", "#kuda"), index: $('#index1', '#index1'), region: $('#region', '#region'), // ну, и так далее... city: $('#city'), street: $('#street'), house: $('#house'),
flat: $('#flat')
?
И еще (не знаю - куда отправить). Сегодня, в этих подсказках, попалась такая деталь: при наборе "клин" (г. Клин, Московская область), появилась улица Акуловская. Также она появляется, если набирать "Акуловская" - появляется вариант: г. Клин, ул. Акуловская. Можно ввести любой трёхзначный номер дома. Яндекс эту улицу в г. Клин не находит...
Такая улица есть в городе Клин, во всяком случае так считает ФИАС (справочник адресов налоговой), по которому работают Подсказки.
По поводу трехзначных номеров дома – это корректное поведение.
Подсказки работают по ФИАС, и в нем нет некоторых реально существующих домов. Поэтому мы предлагаем существующие дома, но не ограничиваем пользователя ими.
"Можно ввести любой трёхзначный номер дома" - например, при вводе номера дома, он предлагает то значение, которое ты ввел, вплоть до 999. Если набрать еще один символ - номер дома в подсказках затирается, остается МО, клин, акуловская...
Понятно. А, я правильно понял по поводу кода?
address: $("#otkuda", "#kuda"), index: $('#index1', '#index1'), region: $('#region', '#region'), // ну, и так далее... city: $('#city'), street: $('#street'), house: $('#house'),
Так надо?
Вот так:
enableSuggestions({ address: $("#otkuda"), index: $('#index1'), region: $('#region'), city: $('#city'), street: $('#street'), house: $('#house'), flat: $('#flat') }); enableSuggestions({ address: $("#kuda"), index: $('#index2'), region: $('#region1'), city: $('#city1'), street: $('#street1'), house: $('#house1'), flat: $('#flat1') });
Извините, это пока на локалке, в сеть выложить нет возможности, увы. По-другому как-то можно? Или, если только так - когда опубликую (мой вариант работает, и - ладно...).
С наступающим Новым Годом! :)
Сервис поддержки клиентов работает на платформе UserEcho
Такая улица есть в городе Клин, во всяком случае так считает ФИАС (справочник адресов налоговой), по которому работают Подсказки.
По поводу трехзначных номеров дома – это корректное поведение.
Подсказки работают по ФИАС, и в нем нет некоторых реально существующих домов. Поэтому мы предлагаем существующие дома, но не ограничиваем пользователя ими.