Оператор If Else не работает внутри .each()

#javascript #html #jquery

#javascript #HTML #jquery

Вопрос:

При отправке формы она запускается, что означает, что код внутри if выполняется, и после того, как код else также выполняется.

 $("#new_chq").submit(function(){

    var inputs = document.getElementsByName("val_2[]");
    var i;
    
    for (i = 1; i <= inputs.length; i  ) {

       $('#file_' i).each(function() {
        
          if(!$('#file_' i).val() == ''){
    
             $('#text_' i).attr('required', '');
             return false;        
          }
          else{
             return true ;
          }
       });
    }        
});
 

Комментарии:

1. Чего вы пытаетесь достичь с помощью этого кода?

2. @ Felix Kling останавливает выполнение кода, когда условие if выполняется.

3. Находясь внутри jQuery each … это return false; означает следующее: разорвать цикл! Итак, перед циклом поместите переменную, скажем var valid=true , чем внутри цикла, если необходимо измените на valid=false; — позже, после цикла вы можете вернуть true или false, чтобы прекратить отправку формы…

4. @ skobaljic уже сделал, как вы говорите, но не работает

5. Что могло бы перестать выполняться? Как уже упоминалось, операторы return находятся внутри .each обратных вызовов, поэтому они не будут влиять ни на что за его пределами.

Ответ №1:

Как вы можете видеть в документах:

Мы можем прервать цикл $.each() на определенной итерации, заставив функцию обратного вызова возвращать false . Возврат значения, отличного от false, аналогичен оператору continue в цикле for; он немедленно перейдет к следующей итерации.

Итак, вам нужно переместить обработку событий формы после каждого цикла jQuery.

Вот пример:

 $("#new_chq").on('submit', function() {
    var isValid = true;
    $('[id^=file_]').each(function() {
        if($(this).hasAttr('required') amp;amp; !$(this).val()) {
            isValid = false;
            return false; // <- this breaks the loop
        };
    });
    return isValid;
});
 

Пожалуйста, обратите внимание, что в вашем коде есть другие ошибки, такие как $('#file_' i).each цикл, который не имеет смысла — это один элемент с уникальным идентификатором.