在通过Ajax请求提交之前使用jQuery进行表单验证

时间:2013-03-03 02:32:19

标签: jquery ajax validation

在尝试使用Ajax请求将表单提交到我的php脚本之前,我试图让我的表单进行验证。我已经查看了stackoverflow并找不到有用的东西。

我有3个输入和一个提交按钮:

<input type="text" name="full-name" id="full-name" value="" placeholder="Full Name" />
<input type="text" name="email" id="email" value="" placeholder="Email" />
<textarea name="message" id="message" value="" rows="8" placeholder="Message"></textarea>
<input type="submit" id="contact-submit" class="contact-submit" value="Submit">
<div id="messageResponse" class="center" style="display:none;"></div>

$(document).ready(function() {

    function validator(){
        return $('form').validate();
    }

    $('form').on('submit', function(e) {
        e.preventDefault();

        $.ajax({
            dataType: 'html',
            type: 'post',
            url: 'mail.php',
            data: $('#contact-form').serialize(),
            beforeSubmit: validator,
            success: function(responseData) {
                $('#contact-submit').remove();
                $('#messageResponse').fadeIn(1000);
                $('#messageResponse').html(responseData);
            },
            error: function(responseData){
                console.log('Ajax request not recieved!');
            }
        });

        // resets fields
        $('input#full-name').val("");
        $('input#email').val("");
        $('textarea#message').val("");
    })
});

我应该使用插件吗?我想要的只是用红色边框颜色验证的名称,电子邮件和消息。它让我头疼不已,明天我会和客户见面,最终确定网站。如果我找不到合适的解决方案,我就不会提问。

我也尝试过使用它:jQuery Form Validator Plugin

2 个答案:

答案 0 :(得分:4)

您的$('form').validate()是否指的是jQuery Validate plugin

如果是这样的话,当jQuery Validate插件已经内置提交事件处理程序回调函数时,使用submit处理程序绝对没有意义,而这正是假设的地方放置你的ajax。

As per the documentation for the Validate pluginsubmitHandler回调函数是:

  

“在表单有效时回调处理实际提交。获取   形式作为唯一的论点。替换默认提交。 正确   在验证后通过Ajax提交表单。“

尝试使用此代码,假设您的ajax功能正确无误:

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        // your rules and options,
        submitHandler: function (form) {
            $.ajax({
                dataType: 'html',
                type: 'post',
                url: 'mail.php',
                data: $(form).serialize(),
                success: function (responseData) {
                    $('#contact-submit').remove();
                    $('#messageResponse').fadeIn(1000);
                    $('#messageResponse').html(responseData);
                },
                error: function (responseData) {
                    console.log('Ajax request not recieved!');
                }
            });
            // resets fields
            $('input#full-name').val("");
            $('input#email').val("");
            $('textarea#message').val("");

            return false; // blocks redirect after submission via ajax
        }
    });

});

DEMO:http://jsfiddle.net/kUX2N/

答案 1 :(得分:3)

beforeSubmit是malsup ajaxForm插件的一个选项,而不是jQuery ajax。仅当validator()返回true时才执行ajax。

$('form').on('submit', function(e) {
    e.preventDefault();
    if (validator()){
        $.ajax({...});
    }
});

旁白:

不要使用多行让jQuery多次选择相同的东西,而是可以使用链。

$('#messageResponse').fadeIn(1000).html(responseData);

同样,对于几个元素做同样的事情

$('#full-name, #email, #message').val("");