15.07.2020, 16:22
|
Интересующийся
|
|
Регистрация: 23.09.2019
Сообщений: 20
|
|
Добавление курса доллара и расчет в калькуляторе
Подскажите пожалуйста новичку.
Есть такой простой калькулятор https://jsfiddle.net/rq1jtb7c/2/
1. как избавиться от "NaN" в результатах расчета калькулятора, который появляется, когда начинаешь вводить какие-нибудь параметры?
2. стоимость переменной "baget" дана в долларах. Как в этот калькулятор добавить текущий курс доллара?
Пытался использовать этот сайт https://www.cbr-xml-daily.ru/, но знаний не хватает, чтобы все правильно интегрировать
|
|
15.07.2020, 16:46
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
Сообщение от Artemyi
|
1. как избавиться от "NaN" в результатах расчета калькулятора, который появляется, когда начинаешь вводить какие-нибудь параметры?
|
Проставить значения по умолчанию для полей, которые могут быть не заполнены.
Сообщение от Artemyi
|
2. стоимость переменной "baget" дана в долларах. Как в этот калькулятор добавить текущий курс доллара?
|
Примерно так: https://jsfiddle.net/NexusDeveloper/8k6vwc59/5/
|
|
15.07.2020, 17:42
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Artemyi, можно и нужно, исключить многочисленные if...else, если поступить одним из способов:
а) держать значения вариантов в data атрибутах опций, извлекая выбранное у выбранной опции
б) держать значения вариантов в массиве/объекте, извлекая выбранное по индексу/значению выбранной опции
|
|
16.07.2020, 09:35
|
Интересующийся
|
|
Регистрация: 23.09.2019
Сообщений: 20
|
|
Сообщение от laimas
|
Artemyi, можно и нужно, исключить многочисленные if...else, если поступить одним из способов:
а) держать значения вариантов в data атрибутах опций, извлекая выбранное у выбранной опции
б) держать значения вариантов в массиве/объекте, извлекая выбранное по индексу/значению выбранной опции
|
а) я предполагаю вы про атрибуты value в input. Так можно было бы, но в в них указываются выбранные варианты (например, доставка - да/нет), которая отправляется на почту.
б) не добрался до этого, да и раз работает - не трогаю)
|
|
16.07.2020, 09:36
|
Интересующийся
|
|
Регистрация: 23.09.2019
Сообщений: 20
|
|
Расчет в долларах работает как нужно. Большое спасибо
|
|
16.07.2020, 09:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Artemyi
|
я предполагаю вы про атрибуты value в input
|
Конечно же нет, я о списках, и вместо того чтобы плодить такие портянки в коде:
if (form.baget[0].selected) {
baget=0; // стоимость вариантов = цена*курс доллара
}
else if (form.baget[1].selected) {
baget=100;
}
else if (form.baget[2].selected) {
baget=110;
}
else if (form.baget[3].selected) {
baget=120;
}
else if (form.baget[4].selected) {
baget=130;
}
....
прописать значения для baget в соответствующие опции, то есть
<option data-baget="100" value="1">100<option>
<option data-baget="110" value="2">110<option>
и т.д.
Пример:
<select id="baget">
<option data-baget="1" value="">Не выбран</option>
<option data-baget="100" value="1">№1</option>
<option data-baget="110" value="2">№2</option>
<option data-baget="120" value="3">№3</option>
<option data-baget="130" value="4">№4</option>
<option data-baget="140" value="5">№5</option>
<option data-baget="150" value="6">№6</option>
</select>
<input id="val" />
<script>
document.getElementById('baget').addEventListener('change', function() {
let baget = this.options[this.selectedIndex].dataset.baget;
val.value = baget;
})
</script>
либо использовать массив/объект описывающий эти значения.
Последний раз редактировалось laimas, 16.07.2020 в 09:59.
|
|
17.07.2020, 15:42
|
Интересующийся
|
|
Регистрация: 23.09.2019
Сообщений: 20
|
|
Сообщение от laimas
|
Конечно же нет, я о списках, и вместо того чтобы плодить такие портянки в коде:
if (form.baget[0].selected) {
baget=0; // стоимость вариантов = цена*курс доллара
}
else if (form.baget[1].selected) {
baget=100;
}
else if (form.baget[2].selected) {
baget=110;
}
else if (form.baget[3].selected) {
baget=120;
}
else if (form.baget[4].selected) {
baget=130;
}
....
прописать значения для baget в соответствующие опции, то есть
<option data-baget="100" value="1">100<option>
<option data-baget="110" value="2">110<option>
и т.д.
Пример:
<select id="baget">
<option data-baget="1" value="">Не выбран</option>
<option data-baget="100" value="1">№1</option>
<option data-baget="110" value="2">№2</option>
<option data-baget="120" value="3">№3</option>
<option data-baget="130" value="4">№4</option>
<option data-baget="140" value="5">№5</option>
<option data-baget="150" value="6">№6</option>
</select>
<input id="val" />
<script>
document.getElementById('baget').addEventListener('change', function() {
let baget = this.options[this.selectedIndex].dataset.baget;
val.value = baget;
})
</script>
либо использовать массив/объект описывающий эти значения.
|
Был бы премного благодарен, если вам не сложно, более подробно показать, как это мне прописать в моем калькуляторе?
|
|
17.07.2020, 16:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от Artemyi
|
если вам не сложно, более подробно показать, как это мне прописать в моем калькуляторе
|
Можно было бы и конкретно по калькулятору, но мы уже неделю страдаем от изнывающей жары, и даже лишний раз языком и то пошевелить лень. Поэтому просто пояснение, вникните и сделайте согласно ему. Это несложно для понимания.
В примере видно, что значения для расчета прописываются в data атрибутах, в данном случае это в атрибутах опций - data-baget. У первой опции значение я прописал равным 1. Например, если в списке этом выбрана эта опция (то есть не было выбора варианта), а это значение списка будет операндом в операции умножения, то значение 1 не повлияет на результат. Вы можете другое значение подставить, например 0, если будет сложение, либо вообще не добавлять такого атрибута этой опции, если операция производится только при выборе варианта.
А далее, в функции расчета вы же получаете ссылку на список, а далее получить значение baget у выбранной опции, например:
//это список вариантов
var opt = document.getElementById('baget');
//а это значение baget выбранной его опции полученной из ее атрибута data-baget
var baget = opt.options[opt.selectedIndex].dataset.baget;
//далее это полученное значение подставляется в расчет
У вас не один список этот, и для второго можно и нужно поступить также, зачем разводить портянки в коде.
Думайте, пробуйте, а не получится тогда ..., но сегодня я точно не буду ходить по сайтам, что-то там смотреть и т.д.
Последний раз редактировалось laimas, 17.07.2020 в 16:27.
|
|
20.07.2020, 15:28
|
Интересующийся
|
|
Регистрация: 23.09.2019
Сообщений: 20
|
|
Сообщение от laimas
|
Можно было бы и конкретно по калькулятору, но мы уже неделю страдаем от изнывающей жары, и даже лишний раз языком и то пошевелить лень. Поэтому просто пояснение, вникните и сделайте согласно ему. Это несложно для понимания.
В примере видно, что значения для расчета прописываются в data атрибутах, в данном случае это в атрибутах опций - data-baget. У первой опции значение я прописал равным 1. Например, если в списке этом выбрана эта опция (то есть не было выбора варианта), а это значение списка будет операндом в операции умножения, то значение 1 не повлияет на результат. Вы можете другое значение подставить, например 0, если будет сложение, либо вообще не добавлять такого атрибута этой опции, если операция производится только при выборе варианта.
А далее, в функции расчета вы же получаете ссылку на список, а далее получить значение baget у выбранной опции, например:
//это список вариантов
var opt = document.getElementById('baget');
//а это значение baget выбранной его опции полученной из ее атрибута data-baget
var baget = opt.options[opt.selectedIndex].dataset.baget;
//далее это полученное значение подставляется в расчет
У вас не один список этот, и для второго можно и нужно поступить также, зачем разводить портянки в коде.
Думайте, пробуйте, а не получится тогда ..., но сегодня я точно не буду ходить по сайтам, что-то там смотреть и т.д.
|
Вроде допилил, все работает.
Большое спасибо
|
|
|
|