|
@@ -0,0 +1,102 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html lang="en">
|
|
|
+
|
|
|
+<head>
|
|
|
+ <meta charset="UTF-8">
|
|
|
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
|
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
+ <title>Document</title>
|
|
|
+</head>
|
|
|
+
|
|
|
+<body>
|
|
|
+ <div class="table">
|
|
|
+
|
|
|
+Создайте HTML файл с :
|
|
|
+ <select id='from'> - исходная валюта
|
|
|
+ <select id='to'> - валюта в которую происходит обмен
|
|
|
+ <div id='rate'> - кросскурс между валютами
|
|
|
+ <input type='number' id='amount' /> - сумма в исходной валюте
|
|
|
+ <div id='result'> - сумма в валюте, в которую хотим поменять
|
|
|
+
|
|
|
+Используя заготовку из предыдущего задания, наполните select-ы тэгами option с названиями валют, используя цикл
|
|
|
+ document.createElement
|
|
|
+ innerText для option
|
|
|
+ from.append или to.append
|
|
|
+ За пределами цикла назначьте обработчики onchange для элементов select и oninput для элемента input, используя их id. По этим событиям обновляйте текст в div#rate и div#result
|
|
|
+ -->
|
|
|
+
|
|
|
+ <select name="" id="from"></select>
|
|
|
+ <select name="" id="to"></select>
|
|
|
+ <div id="rate"></div>
|
|
|
+ <input type="number" id="amount" />
|
|
|
+ <div id="result"></div>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
|
|
|
+ .then(data => {
|
|
|
+
|
|
|
+ for (const [currency, value] of Object.entries(data.rates)) {
|
|
|
+
|
|
|
+ const optionFrom = document.createElement('option')
|
|
|
+ const optionTo = document.createElement('option')
|
|
|
+
|
|
|
+ from.append(optionFrom)
|
|
|
+ to.append(optionTo)
|
|
|
+
|
|
|
+ optionFrom.innerText = optionTo.innerText = `${currency}`
|
|
|
+ optionFrom.value = optionTo.value = `${value}`
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ from.onchange = to.onchange = amount.oninput = () => {
|
|
|
+ rate.innerText = `кросскурс: ${(to.value / from.value).toFixed(2)}`
|
|
|
+ result.innerText = `Вы получите: ${(to.value / from.value * +amount.value).toFixed(2)}`
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ </script>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="countries" style="margin-top: 50px;">
|
|
|
+
|
|
|
+ По аналогии с предыдущем заданием, реализуйте интерфейс выбора страны и города:
|
|
|
+ по закрузке данных наполняйте select#countries элементами option с названиями стран;
|
|
|
+ так же назначьте обработчик события onchange в select#countries, который:
|
|
|
+ удаляет старый контент select#cities (достаточно занести в innerHTML или innerText пустую строку)
|
|
|
+ добавляет в select#cities элементы option с городами из выбранной только что страны.
|
|
|
+ Таким образом, при изменении страны будет меняться список городов в select#cities
|
|
|
+ -->
|
|
|
+
|
|
|
+ <select name="" id="countries"></select>
|
|
|
+ <select name="" id="cities"></select>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ fetch('https://raw.githubusercontent.com/russ666/all-countries-and-cities-json/master/countries.min.json').then(res => res.json())
|
|
|
+ .then(data => {
|
|
|
+
|
|
|
+ for (const [country] of Object.entries(data)) {
|
|
|
+
|
|
|
+ const optionCountries = document.createElement('option')
|
|
|
+ countries.append(optionCountries)
|
|
|
+ optionCountries.innerText = `${country}`
|
|
|
+
|
|
|
+ countries.onchange = () => {
|
|
|
+
|
|
|
+ cities.innerText = ''
|
|
|
+
|
|
|
+ for (const city of data[countries.value]) {
|
|
|
+
|
|
|
+ const optionCities = document.createElement('option')
|
|
|
+ cities.append(optionCities)
|
|
|
+ optionCities.innerText = `${city}`
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ </script>
|
|
|
+ </div>
|
|
|
+</body>
|
|
|
+
|
|
|
+</html>
|