Ничто в doTheMath
не является постоянным; один его вызов не «сохранит» переменные для следующего вызова.
Рассмотрим, как слушатели (которые можно сократить до одного) вызывают функцию, которая получает оба значения, затем вызывают doTheMath
с обоими:
attachListeners() {
document.addEventListener("change", e => {
if (e.target.matches('#license_amount, .radio')) {
e.stopPropagation();
getValues();
}
})
}
getValues() {
const radioValue = document.querySelector('.radio:checked')?.value ?? 13;
const selectValue = document.querySelector('#license_amount').value || 1;
this.doTheMath({
radioValue,
selectValue
});
}
doTheMath({ radioValue, selectValue }) {
console.log(radioValue, selectValue);
}
Смена радиокнопки вызовет событие change
, которое вы можете прослушивать, поэтому оно будет работать как для радиокнопки, так и для выбора.
Настройте .matches
вызовите, чтобы правильно выбрать переключатель (например, если переключатели имеют класс radio
, используйте селектор в приведенном выше коде).
class X {
attachListeners() {
document.addEventListener("change", e => {
if (e.target.matches('#license_amount, .radio')) {
e.stopPropagation();
this.getValues();
}
})
}
getValues() {
const radioValue = document.querySelector('.radio:checked')?.value ?? -1;
const selectValue = document.querySelector('#license_amount').value || 77;
this.doTheMath({
radioValue,
selectValue
});
}
doTheMath({ radioValue, selectValue }) {
console.log(radioValue, selectValue);
}
}
const x = new X();
x.attachListeners();
<input type="radio" class="radio" name="foo" value="1">
<input type="radio" class="radio" name="foo" value="2">
<input type="radio" class="radio" name="foo" value="3">
<select id="license_amount">
<option></option>
<option value="55">55</option>
<option value="66">66</option>
</select>