Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как сделать автоматический конвертер валют определенной суммы по текущему курсу на jquery?

    Сразу говорю, код из старого проекта и не факт, что оптимальный способ сделать конвертацию. А еще использовать JQuery в 2021 не модно.

    Я делал следующим образом. При загрузке страницы получаю информацию о курсе нужных валют, используя этот API, затем записываю отношение рубля к нужной валюте в input (чтобы каждый раз не получать значения). После чего просто отслеживаю нажатие на кнопку и выполняю конвертацию.

    Получение курса валют:
    $.getJSON('https://www.cbr-xml-daily.ru/daily_json.js', function (data)
        {
            let USDrate = Number(data.Valute.USD.Value);
            let USDNominal = Number(data.Valute.USD.Nominal);
    
            $('input[name="usd-rate"]').val((USDrate / USDNominal).toFixed(2));
        })
        .fail(function (jqXHR, textStatus, errorThrown)
        {
            // Делаю блок выбора валют неактивным, путем добавление CSS класса
            $('.currency-select-container').addClass('disabled');
        });


    Конвертация при клике:
    $(document).on('click', '.currency-select-container .item', function ()
    {
        let convertedTotal = 0;
    
        let actualTotal = $('input[name="actualTotal"]').val();         // Сумма для конвертации
        let initialCurrency = $('input[name="initialCurrency"]').val(); // Изначальная валюта
    
        // Значение выбранной валюты (например из data арибута). Значения USD, EUR и т.д.
        let selectedCurrency = $(this).data('name').toLowerCase();
    
        // Отношение выбранной валюты к рублю
        let currencyRate = $('input[name="' + selectedCurrency + '-rate"]').val();
    
        // Отношение к изначальной валюте. Если конвертация всегда из рублей, то это значение всегда = 1
        let initialRate = $('input[name="' + initialCurrency.toLowerCase() + '-rate"]').val();
    
        if (initialCurrency === "RUB")
        {
            // Если изначальная валюта рубли, то просто конвертируем,
            // используя ранее полученное значение отношения валют
            convertedTotal = actualTotal / currencyRate;
        }
        else
        {
            // Если конвертация не из рублей, то сначала получаю сумму в рублях
            // После чего также обычная конвертация
            let totalInRub = actualTotal * initialRate;
            convertedTotal = totalInRub / currencyRate;
        }
    
        // 1000 в RUB это 13,64 в USD
        console.log(actualTotal + ' в ' + initialCurrency + ' это ' + convertedTotal.toFixed() + ' в ' + selectedCurrency);
    });


    Вот пример того, что хранится в инпутах:
    image.png
    По кнопкам думаю и так понятно из кода выше. Там просто должен быть data-атрибут с наименованием валюты, в которую хотите выполнить конвертацию.

    Еще раз повторюсь, что это лишь моя реализация и она далека от идеала (а может и вообще неправильная).
    Ответ написан
    Комментировать