Как принудительно форматировать проверку на стороне клиента в или до $.ajax()

У меня есть форма и ненавязчивые проверки. По умолчанию в методе отправки метод проверки на стороне клиента запускается и (если у вас есть какие-либо ошибки) форма выглядит следующим образом:

enter image description here

Проверка выполняется даже до отправки любых данных на сервер.

Теперь это поведение не работает, если вы хотите использовать метод $.ajax. Проверка на стороне клиента не работает. Вы должны вручную проверить все поля в вашем javascript, потеряв всю красоту DataAnnotations.

Есть ли лучшее решение? Я мог бы использовать jquery submit(), но, я думаю, у него нет обратного вызова, например $. Ajax.

Ответ 1

Ох...

if (form.valid()) // do submit

Ответ 2

Вы должны принудительно проверить форму, прежде чем проверять, действительно ли она действительна. Что-то вроде этого:

var form = $( "#myform" );
form.validate();
if (form.valid()) {
    // ...
}

Ответ 3

У меня была та же проблема, что и у Ябларго, в которой говорилось, что действительный не является функцией, поэтому я придумал следующее:

Для обработчика onclick кнопки submit я помещаю это:

onclick = "return $(this).closest('form'). checkValidity();"

Ответ 4

Я сделал...

$("#form-submit-button").click(function (e) {
    e.preventDefault(); // Stops the form automatically submitting
    if ($("#my-form").valid()) {
        $("#my-form").submit();
    }
});

Это также кажется хорошим решением, если вы указали текстовые поля с плагином, чтобы сделать эти текстовые поля в элементе управления календарем. Единственная причина, по которой я говорю это, - это то, что я использовал Zebra Datepicker с формой MVC, и он отправил бы недопустимую форму, если бы основное внимание было уделено календарю выбора даты. Использование приведенного ниже кода останавливает это.