Как запретить отправку формы, если цикл вернул false?

Валидация формы регистрации:

$('.registration form').on('submit', function() {
    var $form = $(this);
    $form.find('input:not([type="submit"])').each(function() {
        if (this.value == '') {
            this.focus();
	    alert('Заполните все поля');
	    return false;
        }
    });
    $.post(
        '/includes/users.php',
	{'reg-email': $('#reg-email').val()}
    ).done(function(check) {
        if (check) {
	    $('.registration .clear').css('display', 'block');
	} else {
	    $form.off('submit').submit();
	}
    });
    return false;
});


Вопрос: как запретить последующие проверки, а вместе с этим и отправку формы, если цикл each вернул false?
  • Вопрос задан
  • 10188 просмотров
Пригласить эксперта
Ответы на вопрос 2
somenumboola
@somenumboola
Team Lead in B-online Solutions
Я лично не совсем понял как у вас отрабатывает представленный пример. Есть два способа повесить хендлер на событие.
Первый, проприетарный :
jQuery('form').on('submit',function(e){
     e.preventDefault(); //Отменили нативное действие
     (e.cancelBubble) ? e.cancelBubble : e.stopPropagation; //Погасили всплытие
}

И второй, через алиас:
jQuery('form').submit(function(){
return false; //Отменили нативное действие
});

А у вас что-то среднее получилось.
Кроме того почему не сделать так:
jQuery('form').on('submit',function(e){
    var flag = true, 
        inputs = jQuery('input:not([type="submit"])',this); // Вторым аргументом указываем где искать
    inputs.each(function(){
        if(jQuery(this).val() == ''){
            flag = false;
        }
    });
    if(flag){
          /* Ajax запрос */
        alert('Запрос!');
     } else {
        alert('Заполни меня!!!');
     }
     e.preventDefault(); //Отменили нативное действие
     (e.cancelBubble) ? e.cancelBubble : e.stopPropagation; //Погасили всплытие
});

Рабочий пример
Ответ написан
shcherbanich
@shcherbanich
Программист
var $form = $(this),flag =0;
    $form.find('input:not([type="submit"])').each(function() {
        if (this.value == '') {
            this.focus();
	    alert('Заполните все поля');
	    flag = 1;
             return false;
        }
    });
if(flag)
return false;
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект