@DeniSidorenko

Возможно ли сделать условие универсальным?

Добрый день, есть такой код
var form = $('form');
var inputs = form.find('input');
form.change(function(){
    var status = [];
    inputs.each(function(){
        if(this.value == ''){
            return status.push('no');
        }
        else{
            return status.push('ok');
        }
    });
    console.log(status);
    if(status[0] == 'ok' && status[1] == 'ok' && status[2] == 'ok' && status[3] == 'ok'){
      $('.btn-submit').addClass(_active)
    }
});


Все очень просто, при заполнение 4 элементов для input к кнопке добавляется класс. Скрипт работает хорошо, но если к примеру будет не 4 элемента а 5, то условие сработает уже сразу как заполниться 4 , ведь условия не универсальное.
if(status[0] == 'ok' && status[1] == 'ok' && status[2] == 'ok' && status[3] == 'ok'){
      $('.btn-submit').addClass(_active)
    }


Можно ли как то оптимизировать дабы не зависить от количество полей?
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
form.change(function() {
    let isOk = true
    
    // Перебираем элементы
    for (let i = 0; i < inputs.length; i++) {
        if (inputs[i].value == '') {
            // Если неок, то останавливаем цикл — дальше нет смысла перебирать
            isOk = false
            break
        }
    }
    
    // Если ок, добавляем класс
    if (isOk) {
        $('.btn-submit').addClass(_active)
    }
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Froggyweb
нефига не знаю ЯП, но у формы нет события change, может от инпута оно всплывает, но как-то не знаю...
Зато у инпутв есть атрибут required
У статуса в данном случае лучше сделать true, false, NULL а не массив

если приспичило использовать массив то есть forEach
Ответ написан
Ваш ответ на вопрос

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

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