Сразу говорю, код из старого проекта и не факт, что оптимальный способ сделать конвертацию. А еще использовать 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);
});
Вот пример того, что хранится в инпутах:
По кнопкам думаю и так понятно из кода выше. Там просто должен быть data-атрибут с наименованием валюты, в которую хотите выполнить конвертацию.
Еще раз повторюсь, что это лишь моя реализация и она далека от идеала (а может и вообще неправильная).