yaleksandr89
@yaleksandr89
PHP developer

Почему не срабатывает условие if else?

Всем привет!
Подскажите, как исправить проверку, что бы она работа корректно:
Данный код, забирает все имеющиеся input[type=radio], после проверкой if смотрит у какого из элементов стоит checked и забирает из этого объекта data-operation и передает в функцию для вычисления.
let buttonsOperations = document.querySelectorAll('input[type=radio]');
for (let i = 0; i < buttonsOperations.length; i++) {
    if (buttonsOperations[i].checked === true) {
        let operator = buttonsOperations[i].getAttribute('data-operation');
        calculatorOperator(operator);
    } else {
        output.innerHTML = '<strong>Ошибка!</strong> Арифметическая операция не выбрана.';
    }
}


Самое странное, что если убрать
else { output.innerHTML = '<strong>Ошибка!</strong> Арифметическая операция не выбрана.'; }
, то арифметические операции работают как надо, а вот если добавить else (что я очень хочу сделать), то происходит следующее. Он выполняет первое условие и переходить ко второму, то есть всегда получаю: Ошибка! Арифметическая операция не выбрана.

Это вполне логично, так как проверка идет внутри for, и на данный момент у меня 4 элемента, поэтому при любых раскладах буду получать:
buttonsOperations[i].checked === false → 3шт.
buttonsOperations[i].checked === true → 1шт.


Поэтому получается, что он выполняет 1 условие и переходи ко второму. И я буксую на этом. Как составить условие, при котором, проверка выкинет ошибку: "Не выбрана ни одна арифметическая операция", только тогда, когда не выбран ни один input (typy=radio).

Возможно получилось несколько сумбурно :) за что извиняюсь, просто в голове вертится понимание из-за чего этот баг лезет, но я напрочь не понимаю, как его устранить((

Поэтому на всякий случай выложу:
Калькулятор
Скрипт
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
Zoominger
@Zoominger
System Engineer
Если я правильно понял задачу (очень уж вы её размазали), вам надо, чтобы ошибка выкидывалась, когда не выбран ни один радиобуттон.

Перед условием заведите переменнуюbool allNotChecked со значением true, затем в первом цикле поверяйте состояние элементов, если какой-то из них выбран, то присваивайте переменной false. После цикла - второе условие, если allNotChecked останется true, то выдавайте ошибку. Поняли?
Ответ написан
@h88p
Pre-Junior HTML Developer
Без цикла
if (!(Array.from(document.querySelectorAll('input[type=radio]')).filter(w => w.checked).length > 0)) {
   output.innerHTML = '<strong>Ошибка!</strong> Не выбрана ни одна арифметическая операция';
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
let buttonsOperations = document.querySelectorAll('input[type=radio]:checked');
if(buttonsOperations.length > 0) {
        calculatorOperator(buttonsOperations[0].getAttribute('data-operation'));
} else {
        output.innerHTML = '<strong>Ошибка!</strong> Арифметическая операция не выбрана.';
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы