在提交时检查 jQuery 验证之前的表单提交

Posted

技术标签:

【中文标题】在提交时检查 jQuery 验证之前的表单提交【英文标题】:Form submitting before jQuery validation is checked on submit 【发布时间】:2012-07-08 22:33:43 【问题描述】:

我正在使用 Ajax 和 jQuery 来验证和提交表单中的信息。我遇到的问题是,当我单击提交按钮时,表单会在执行验证检查并显示错误之前立即将信息提交到服务器?

我不确定这里有什么问题,所以任何输入都会很棒!

干杯

$('#submit_second').click(function() 
    //remove classes
    $('#second_step input').removeClass('error').removeClass('valid');

    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]2,4$/;
    var phonePattern = /^\+?[0-9]0,15$/ ;  
    var fields = $('#second_step input[type=text]');
    var error = 0;
    fields.each(function() 
        var value = $(this).val();
        if( value.length<1 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='email' && !emailPattern.test(value))) 
            $(this).addClass('error');
            $(this).effect("shake",  times:3 , 50);

            error++;
         else 
            $(this).addClass('valid');
        
        if( value.length<1 || value==field_values[$(this).attr('id')] || ( $(this).attr('id')=='phone' && !phonePattern.test(value) )  ) 
            $(this).addClass('error');
            $(this).effect("shake",  times:3 , 50);

            error++;
         else 
            $(this).addClass('valid');
        

    );

    if(!error) 
        //update progress bar
        $('#progress_text').html('66% Complete');
        $('#progress').css('width','226px');

        //slide steps
        $('#second_step').slideUp();
        $('#fourth_step').slideDown();     
     else return false;
);

$('#submit_second').click(function()

    url =$("input#url").val();
    yourname =$("input#yourname").val();
    email =$("input#email").val();
    phone =$("input#phone").val();

    //send information to server
    var dataString = 'url='+ url + '&yourname=' + yourname + '&email=' + email + '&phone=' + phone;  

    alert (dataString);

    $.ajax(  
        type: "POST",  
        url: "#",  
        data: "url="+url+"&yourname="+yourname+"&email="+email+'&phone=' + phone,
        cache: false,
        success: function(data)   
            console.log("form submitted");
            alert("success");
        
    );  
    return false;
);

【问题讨论】:

【参考方案1】:
$('form_to_validate').submit(function() 
    // .. stuff
);

【讨论】:

我试过了,但是在提交每个部分后,表单有多个部分使用 jquery 动态加载,因此它不能正常工作,因为有 2 个部分每个都有一个提交按钮,第一部分工作正常,但作为我试图在第二阶段同时验证数据并将数据提交到服务器,它似乎在以我的代码结构方式执行验证检查之前提交数据? 在您的问题中向我们展示 HTML。【参考方案2】:

我猜你正在寻找的是这样的:

$('#submit_second').submit(function(evt)
    evt.preventDefault();
    ...
);

查看 jQuery 文档:http://api.jquery.com/event.preventDefault/

【讨论】:

觉得这行不通吗?我不想阻止表单提交,只是在首先检查验证之后发生!如果我要将所有代码移动到一个函数中,您认为这将有助于解决问题吗? 是的。您可以调用 preventDefault 以防验证失败,否则表单将正确提交。 我终于解决了问题,加油! ***.com/questions/11413111/…

以上是关于在提交时检查 jQuery 验证之前的表单提交的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 表单验证检查以循环结束

使用 .on 和 .validate 的 jQuery 必须提交两次表单才能验证

jQuery表单验证

Ajax提交之前的jQuery表单验证

提交常规表单之前的 AJAX 请求

在提交第二个表单时,正在验证第一个表单 - jquery validate