简体   繁体   English

jQuery表单验证程序:需要提交两次

[英]jQuery form Validator: need to submit twice

I am trying to implement the Form Validator from Jquery. 我正在尝试从Jquery实现表单验证器。 onSuccess, I do an ajax-call. onSuccess,我进行了ajax调用。

I was wondering why I need to push the submit-button twice before the validation starts working? 我想知道为什么在验证开始之前需要两次按下提交按钮?

The script is in a separate file which is included. 该脚本位于一个单独的文件中。 If I call $.validation() on the page itself, it works immediately. 如果我在页面本身上调用$ .validation(),它将立即起作用。

Here is the js-code: 这是js代码:

$(document).ready(function () {
    $("#frmNews").submit(function (e) {
        e.preventDefault();

        // -- form validation
        $.validate({
            language: nederlands,
            onError: function () {
                // -- show alert
                $("#feedback-error").removeClass('hidden');
                // -- back to top
                $("html, body").animate({scrollTop: 0}, "slow");
            },
            onSuccess: function () {
                // -- show preloader
                $('body').toggleClass('loaded');

                $.ajax({
                    type: 'POST',
                    url: '/ajax',
                    data: $("#frmNews").serialize(),
                    success: function (data) {
                        var result = $.trim(data);
                        if (result == 'success') {
                            // -- show alert
                            $("#feedback-success").removeClass("hidden");
                            // -- clear all fields
                            emptyAllInputFields("#frmNews");
                            // -- back to top
                            $("html, body").animate({scrollTop: 0}, "slow");
                            // -- hide preloader
                            $('body').toggleClass('loaded');
                        }
                        else if (result == 'error_saving') {
                            // -- alert
                            $("#feedback-error").removeClass("hidden");
                            // -- back to top
                            $("html, body").animate({scrollTop: 0}, "slow");
                            // -- hide preloader
                            $('body').toggleClass('loaded');
                        }
                    }
                });
            }
        });
    });
});

As mentioned by @epascarello in the comment section, you should place your validation outside of the submit handler. 正如在注释部分@epascarello提到的,你应该把你的验证提交处理程序之外

What's actually happening in your script - The $.validate() is only initiated once the submit button is pressed. 脚本中实际发生的情况- 在按下提交按钮后才启动$.validate() Then it handles validation (and eventually AJAX) on next click. 然后,它在下次单击时处理验证(最终是AJAX)。

$("#frmNews").submit(function (e) {
    e.preventDefault();
});

$.validate({
    // ... your validation ...
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM