Как сохранить данные в переменную только 1 раз?
Есть 2 поля формы: 1 - select с несколькими параметрами и 2 - input. Нужно при смене опций в select менять изначально введенное значение в input.
<select>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<input type="text">
При выборе 1 мы умножаем число из input 1, если выбираем 2-й option, то мы должны умножить именно 1 введенное число, а не результат, который получен из 1 select + запись в input.
Ответы (1 шт):
Автор решения: OPTIMUS PRIME
→ Ссылка
Нужна внешняя переменная, которая будет хранить последнее введенное значение в input.
let input = document.querySelector("#input");
let select = document.querySelector("#select");
let init_value = Number(input.value); // Начальное значение
input.addEventListener("input", function() {
init_value = Number(this.value); // Меняется, когда вручную меняют значение input.
select.selectedIndex = 0; // Сброс на option-1
// или init_value = this.value / select.value;
// т.е. если введут 40, а на select уже выбрано 2, init_value станет 20.
});
select.addEventListener("change", function() {
input.value = init_value * this.value;
// this.value = по совместительству, строка внутри выбранного option
});
<select id="select">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<input id="input" value="20">
Внутри обработчика select... this.value - строка. Операция умножения и так автоматически превращает её в число. А было бы там суммирование - пришлось бы её тоже отдельно превращать в число.