0
Answered

как реализовать механизм, аналогичный https://dadata.ru/suggestions/#demo

Anonymous 3 years ago • updated by Антон 3 years ago 6

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

m = new a.PartySuggestions(c, r.API_KEY, {

$party: t("input#party-input"),
$name: t("#party-name"),
$fullname: t("#party-fullname"),
$address: t("#party-address"),
$inn: t("#party-inn"),
$ogrn: t("#party-ogrn"),
$date: t("#party-date"),
$state: t("#party-state"),
$actuality_date: t("#party-actuality_date"),
$additional: t("#party-additional"),
$help: t("#party-help"),
$feedback: t("#party-feedback")

}),
Однако беглый анализ плагина jquery.suggestions-15.10.min.js не дал результатов, не удалось найти похожий метод.

Under review

Уточните пожалуйста, какой именно механизм интересует?

именно механизм автоматического изменения адреса в свободной форме (на который указывают стрелки "введите адрес в свободной форме") после редактирования одного из полей адреса ( на который указывают стрелки "все поля заполняются автоматически").
На странице https://dadata.ru/suggestions/#demo в поле "Введите адрес в свободной форме" вводим адрес например "г Санкт-Петербург, Пискаревский пр-кт, д 25" . При этом автоматически заполняются поля индекс, регион, улица, дом. Берем значение "25", указанное в поле дом изменяем его например на 27. При этом в поле "Введите адрес в свободной форме" происходит соответсвующее изменение адреса на "г Санкт-Петербург, Пискаревский пр-кт, д 257



интересует именно механизм автоматического изменения адреса в свободной форме (на который указывают стрелки "введите адрес в свободной форме") после редактирования одного из полей адреса ( на который указывают стрелки "все поля заполняются автоматически").



на странице https://dadata.ru/suggestions/#demo в поле "Введите адрес в свободной форме" вводим адрес например "г Санкт-Петербург, Пискаревский пр-кт 25"

При этом автоматически заполняются поля индекс, регион, улица, дом. Берем значение, указанное в поле дом "25" и изменяем его например на "27". При этом в поле "Введите адрес в свободной форме" происходит изменение адреса на "г Санкт-Петербург, Пискаревский пр-кт 27" Интрересует механизм автоматического изменения этого поля.




Answered

Если я правильно понял – вы хотите раскладывать адрес по полям. Посмотрите пример, как можно реализовать эту функциональность.

это у меня уже реализовано. Интрересует именно механизм автоматического изменения поля. "Введите адрес в свободной форме" . т.е. обратный этому примеру. т.е. склеивание адреса из составляющих а не его раскладывание

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

var parts = [$region, $city, $street];
parts.forEach(function($part) {
    $part.change(function() {
        onPartChange(formatParts(parts));
    });
});

function join(arr) {
    var separator = " ";
    return arr.filter(function(n){return n;}).join(separator);
}

function formatParts(parts) {
    var partialValues = parts.map(
            function($el) { return $el.val(); }
        );
    return join(partialValues);
}

function onPartChange(newVal) {
    suggestOne(newVal)
    .done(function(response) {
        var suggestion = response.suggestions[0];
        $address.val(suggestion.value);
    });
}

function suggestOne(query) {
    var serviceUrl = "https://dadata.ru/api/v2/suggest/address",
        token = "***",
        request = {
            "query": query
        },
        params = {
            type: "POST",
            contentType: "application/json",
            headers: {
                "Authorization": "Token " + token
            },
            data: JSON.stringify(request)
        };
    return $.ajax(serviceUrl, params);
}