yaleksandr89
@yaleksandr89
Junior backend 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).

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

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

Перед условием заведите переменную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> Арифметическая операция не выбрана.';
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 110 000 до 150 000 руб.
Александрия Москва
от 200 000 до 250 000 руб.
Алгоритмика Москва
от 120 000 до 200 000 руб.
24 авг. 2019, в 11:59
5000 руб./за проект
24 авг. 2019, в 11:31
30000 руб./за проект
24 авг. 2019, в 10:59
750 руб./за проект