HW09.html 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div class="table">
  11. <!--
  12. Создайте HTML файл с :
  13. <select id='from'> - исходная валюта
  14. <select id='to'> - валюта в которую происходит обмен
  15. <div id='rate'> - кросскурс между валютами
  16. <input type='number' id='amount' /> - сумма в исходной валюте
  17. <div id='result'> - сумма в валюте, в которую хотим поменять
  18. Используя заготовку из предыдущего задания, наполните select-ы тэгами option с названиями валют, используя цикл
  19. document.createElement
  20. innerText для option
  21. from.append или to.append
  22. За пределами цикла назначьте обработчики onchange для элементов select и oninput для элемента input, используя их id. По этим событиям обновляйте текст в div#rate и div#result
  23. -->
  24. <select name="" id="from"></select>
  25. <select name="" id="to"></select>
  26. <div id="rate"></div>
  27. <input type="number" id="amount" />
  28. <div id="result"></div>
  29. <script>
  30. fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
  31. .then(data => {
  32. for (const [currency, value] of Object.entries(data.rates)) {
  33. const optionFrom = document.createElement('option')
  34. const optionTo = document.createElement('option')
  35. from.append(optionFrom)
  36. to.append(optionTo)
  37. optionFrom.innerText = optionTo.innerText = `${currency}`
  38. optionFrom.value = optionTo.value = `${value}`
  39. }
  40. from.onchange = to.onchange = amount.oninput = () => {
  41. rate.innerText = `кросскурс: ${(to.value / from.value).toFixed(2)}`
  42. result.innerText = `Вы получите: ${(to.value / from.value * +amount.value).toFixed(2)}`
  43. }
  44. })
  45. </script>
  46. </div>
  47. <div class="countries" style="margin-top: 50px;">
  48. <!--
  49. По аналогии с предыдущем заданием, реализуйте интерфейс выбора страны и города:
  50. по закрузке данных наполняйте select#countries элементами option с названиями стран;
  51. так же назначьте обработчик события onchange в select#countries, который:
  52. удаляет старый контент select#cities (достаточно занести в innerHTML или innerText пустую строку)
  53. добавляет в select#cities элементы option с городами из выбранной только что страны.
  54. Таким образом, при изменении страны будет меняться список городов в select#cities
  55. -->
  56. <select name="" id="countries"></select>
  57. <select name="" id="cities"></select>
  58. <script>
  59. fetch('https://raw.githubusercontent.com/russ666/all-countries-and-cities-json/master/countries.min.json').then(res => res.json())
  60. .then(data => {
  61. for (const [country] of Object.entries(data)) {
  62. const optionCountries = document.createElement('option')
  63. countries.append(optionCountries)
  64. optionCountries.innerText = `${country}`
  65. countries.onchange = () => {
  66. cities.innerText = ''
  67. for (const city of data[countries.value]) {
  68. const optionCities = document.createElement('option')
  69. cities.append(optionCities)
  70. optionCities.innerText = `${city}`
  71. }
  72. }
  73. }
  74. })
  75. </script>
  76. </div>
  77. </body>
  78. </html>