JQuery Validator - 在有效提交时不调用Success函数

时间:2013-05-21 09:54:32

标签: php javascript jquery validation jquery-validate

我正在使用来自http://bassistance.de/jquery-plugins/jquery-plugin-validation/

的JQuery验证器

我编写了我需要的JQuery,它正确验证了但是我的提交功能的最后一部分无法正常工作。

$("#commentForm").validate({
    rules: {
        email_options_name: {
            required: true
        },
        email_options_company: {
            required: true
        },
        email_options_country: {
            required: true
        },
        email_option_email: {
            required: true,
            email: true
        },
        check_options: {
            required: true,
            minlength: 1
        }
    },      
});

$("#commentForm").submit(function(){

    var valid = $("#commentForm").valid();
    if (valid) {
                $.post('scripts/process_email_initial_form.php',$(this).serialize(), function(o) {
                    location.reload();
                }, 'json');
            } else {
                $('.full-error').show();
            }

                return false;
});

$.extend($.validator.messages, {
            required: "!",
            email: "!"
});

}

当提交有效时,脚本process_email_initial_form.php被调用并正确处理(从查看firebug),如果不是div确实显示。问题是当脚本运行完毕后location.reload();没有调用。理想情况下,我想直接找到成功页面,但这也不起作用。

我试图在process_email_initial_form.php的末尾添加一个php标头函数,但这也不起作用。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

根据docs,submitHandler回调是“经过验证后通过Ajax提交表单的正确位置。”

$("#commentForm").validate({
    rules: {
        // your rules here
    },
    submitHandler: function(form) {
       // example below uses the 'form' plugin
       // http://www.malsup.com/jquery/form/#api
       $(form).ajaxSubmit({
            success: function(){
                window.location.href="newPage.php"
            }
       });
    }      
});

答案 1 :(得分:0)

您只检查过表单是否有效。通过检查这将仅返回布尔值,它不会设置错误消息。在显示之前,您需要将错误分配给$('。full-error')。

尝试

$("#commentForm").validate();

答案 2 :(得分:0)

您是否尝试使用done事件?

$.post(
    'scripts/process_email_initial_form.php',
    $(this).serialize(), 
    function(o) {
       console.log('success');
    },
    'json'
).done(function(o){
    window.location.replace("success.php");
});

ajax页面中的PHP标头不会将当前页面重定向到成功页面。它只会使你的ajax页面重定向到定义的标题。

您可以尝试使用jquery提交表单,而不是使用window.location.replace

$("#commentForm").submit(function(){
    var valid = $("#commentForm").valid();
    if (valid) {
        $.post(
        'scripts/process_email_initial_form.php',
        $(this).serialize(),
        function(o) {
            console.log('success');
        },
        'json')
        .done(function(o) {
            $(this).attr('action', 'success.php');
            return true;
        });
    } else {
        $('.full-error').show();
        return false;
    }
});

OR

$("#commentForm").submit(function(){
    var valid = $("#commentForm").valid();
    if (valid) {
        $.post(
        'scripts/process_email_initial_form.php',
        $(this).serialize(),
        function(o) {
            $(this).attr('action', 'success.php');
            return true;
        },
        'json');
    } else {
        $('.full-error').show();
        return false;
    }
});