0
Answered

Два адреса

Anonymous 3 years ago in Подсказки • updated 3 years ago 10

Здравствуйте!

Подскажите пожалуйста - как реализовать схему "откуда" - "куда" (адреса) не дублируя скрипт? На данный момент дублирую скрипт целиком, т.е.: <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
    ], ' '));
}

Answer

Answer

Такая улица есть в городе Клин, во всяком случае так считает ФИАС (справочник адресов налоговой), по которому работают Подсказки.

По поводу трехзначных номеров дома – это корректное поведение.

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

Answered

Примерно так:

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')

?

И еще (не знаю - куда отправить). Сегодня, в этих подсказках, попалась такая деталь: при наборе "клин" (г. Клин, Московская область), появилась улица Акуловская. Также она появляется, если набирать "Акуловская" - появляется вариант: г. Клин, ул. Акуловская. Можно ввести любой трёхзначный номер дома. Яндекс эту улицу в г. Клин не находит...

Answer

Такая улица есть в городе Клин, во всяком случае так считает ФИАС (справочник адресов налоговой), по которому работают Подсказки.

По поводу трехзначных номеров дома – это корректное поведение.

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

"Можно ввести любой трёхзначный номер дома" - например, при вводе номера дома, он предлагает то значение, которое ты ввел, вплоть до 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')
});

Спасибо! (не сработало)

Дайте ссылку на страницу, где это подключено, пожалуйста.

Извините, это пока на локалке, в сеть выложить нет возможности, увы. По-другому как-то можно? Или, если только так - когда опубликую (мой вариант работает, и - ладно...).

С наступающим Новым Годом! :)