Два адреса
Здравствуйте!
Подскажите пожалуйста - как реализовать схему "откуда" - "куда" (адреса) не дублируя скрипт? На данный момент дублирую скрипт целиком, т.е.: <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
Такая улица есть в городе Клин, во всяком случае так считает ФИАС (справочник адресов налоговой), по которому работают Подсказки.
По поводу трехзначных номеров дома – это корректное поведение.
Подсказки работают по ФИАС, и в нем нет некоторых реально существующих домов. Поэтому мы предлагаем существующие дома, но не ограничиваем пользователя ими.