Jquery Ненавязчивая проверка потеряна после реализации события onSubmit - PullRequest
0 голосов
/ 27 сентября 2011

Я использую ASP.NET MVC.Моя проверка работала хорошо, пока я не прикрепил событие к событию onSubmit формы.

Вот так выглядит моя форма:

@using (Html.BeginForm("Recover", "Auth", FormMethod.Post, new { Id = "RecForm", onSubmit = "return Events.Submit(this,event)" }))
{
        @Html.TextBoxFor(model => model.Email)
        @Html.ValidationMessageFor(model => model.Email)
        <input type="submit" value="Recover" />
}

Javascript (работает нормально, просто поместите его здесь, чтобы вы моглипроверьте, не вызывает ли это что-то, что проверка не запускается):

//Events
window.Events = (function () {

    // Baseline setup
    var Events = {};

    function disableAllChildren(el) {
        $(el).find(':input').attr('disabled', true);
    }
    function enableAllChildren(el) {
        $(el).find(':input').attr('disabled', false);
    }

    //Ajax submit
    Events.Submit = function (el, event) {
        event.preventDefault();
        //serialize the form before disabling the elements.
        var data = $(el).serialize();

        disableAllChildren(el);
        $(el).find('.success, .error').hide();
        $.ajax({
            url: el.action,
            type: 'POST',
            data: data,
            success: function (data) {
                //Stuff happens.
            }
        });
    };
    return Events;
})(this, this.document);

Как мне вернуть мои проверки?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Я проверяю, является ли форма действительной, прежде чем отправить ее.См. Следующий код:

$form = $("#myForm");

if (form.valid()) {

    form.validate();
    //other codes here

 }

Если форма действительна, то опубликуйте свои данные.Если нет, ничего не делай.

1 голос
/ 27 сентября 2011

В вашем коде больше проблем, чем проверки.Дело в том, что disabled поля не публикуются на сервере.Они также не участвуют в валидации.Таким образом, даже если ваш код сработает, вы ничего не разместите на стороне сервера.Удалите disableAllChildren(el); или перекодируйте его, чтобы не отключите поля, но, возможно, сделайте их доступными только для чтения.

При этом они будут проверены, но неудивительно, что после отправки ajax .Это поведение, которое вы не должны желать, поэтому взгляните на validate метод .Особенно вас может заинтересовать часть, где она

отправляет форму через Ajax, когда она действительна.

Я считаю, что способ подтверждения формы ajax может быть проще.

$(".selector").validate({
   submitHandler: function(form) {
    $(form).ajaxSubmit();
   }
})

Или просто добавьте проверку проверки прямо перед отправкой ajax

...