Как запустить функцию jQuery, только если форма действительна

У меня есть функция jQuery, привязанная к моей кнопке отправки, например:

$(function () {
    $('#signupform').submit(function () {
        alert('test');
    });
});

Однако он срабатывает независимо от того, действительна ли форма. Моя модель украшена различными аннотациями данных, и проверка на стороне клиента работает хорошо, но я хочу, чтобы эта функция jQuery срабатывала только в том случае, если форма была проверена. Как мне это сделать?

EDIT: Чтобы уточнить, я использую MVC DataAnnotations + ненавязчивый javascript jQuery для обработки проверки на стороне клиента. У меня нет собственных написанных процедур проверки javascript. Встроенная проверка jQuery отлично справляется с проверкой формы, но мне просто нужно знать, как преобразовать результаты этой проверки в логическое значение в моей собственной функции.


person Scott    schedule 19.02.2011    source источник


Ответы (2)


Если вы используете ненавязчивую проверку jquery validate, вы можете:

$(function () {
    $('#signupform').submit(function () {
        if($(this).valid()) {
            alert('the form is valid');
        }
    });
});
person Darin Dimitrov    schedule 19.02.2011
comment
Чтобы предотвратить повторную отправку формы, добавьте event.preventDefault(); check это и это, надеюсь кому-нибудь поможет. - person Shaiju T; 20.06.2016
comment
почему valid() не определен, когда я включил "~/Scripts/jQueryValidator1.11/jquery.validate.js" - person Dylan Czenski; 27.08.2016
comment
@shaijut, я знаю, что это старый комментарий, но просто хочу отметить, что приведенные вами примеры работают с событием нажатия кнопки. Я не думаю, что двойная отправка является проблемой, когда вы используете событие отправки формы. - person David Hammond; 06.10.2020

$(function () {
    $('#signupform').submit(function (e) {
        if (validateForm() === true) {
            alert('Form is valid.');
        }
    });
});

Обратите внимание, что функция validateForm() будет той, которую вы используете в браузере для проверки проверки. EDIT: это действительно jQuery $(this).valid().

ПРИМЕЧАНИЕ. При уточнении вопроса приведенный выше ответ — это один из способов остановить отправку формы при проверке, но не желаемый метод (проверка jQuery valid()). Подробности смотрите в ответе Дарина Димитрова.

Кроме того, при перечитывании исходного вопроса намерение было прямо противоположным тому, что я первоначально описал. Поэтому я отредактировал, чтобы продемонстрировать функциональный ответ при проверке, а не как предотвратить отправку формы.

person Jared Farrish    schedule 19.02.2011