#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
цикл, который не имеет смысла — это один элемент с уникальным идентификатором.