2012-07-10 162 views
0

我使用jQuery创建了一个动态表单,该表单包含两个部分,一旦第一部分正确完成,第二部分将无需刷新页面。jQuery表单验证和Ajax提交问题

我的问题是,当第二部分完成时,我需要执行验证,并明确确保没有不正确的数据发送到服务器。现在发生的情况是,如果我第二次点击提交按钮,提交不正确的数据,验证是否在初始点击提交按钮时起作用,但即使没有修复表单输入字段中的数据?

我在网上搜索答案,并尝试了一些不同的东西:

我试图改变第二提交方法:

$('infoform').submit(function() { 
// .. stuff 

});

但没有工作,并也有人建议我尝试:

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

});

但这也没有工作,只阻止验证完全工作?

我想要的是显然有验证保持检查错误,直到输入的数据是正确的,一旦没有错误的数据,然后发送使用ajax调用?

为形式的代码是:

<form id="infoform" name="infoform" action="#" method="post"> 

     <div id="first_step"> 

       <!--<h1>WANT A FREE<br />SOCIAL MEDIA<br />AUDIT?</h1>--> 
       <div class="formtext-img"></div> 

       <div class="form"> 

        <label for="username">Facebook or Twitter page address:</label> 
        <input type="text" name="url" id="url" value="http://" />      

       </div><!-- clearfix --><div class="clear"></div><!-- /clearfix --> 

        <input class="submit" type="submit" name="submit_first" id="submit_first" value="" /> 
     </div><!--end of first step--> 


     <div id="second_step"> 


       <div class="form"> 

        <div id="nameInput"> 
        <label for="yourname">Your Full Name. </label> 
        <!-- clearfix --><div class="clear"></div><!-- /clearfix --> 
        <input type="text" name="yourname" id="yourname" placeholder="Your name" /> 
        </div> 
        <!-- clearfix --><div class="clear"></div><!-- /clearfix --> 
        <div id="emailInput">     
        <label for="email">Your email address.</label> 
        <input type="text" name="email" id="email" placeholder="Email address" /> 
        </div> 
        <!-- clearfix --><div class="clear"></div><!-- /clearfix --> 
        <div id="phoneInput"> 
        <label for="phone">Your contact number. </label> 
        <!-- clearfix --><div class="clear"></div><!-- /clearfix --> 
        <input type="text" name="phone" id="phone" placeholder="contact number" /> 
        </div> 

       </div>  <!-- clearfix --><div class="clear"></div><!-- /clearfix --> 

        <!--<input class="back" type="button" value="" />--> 

        <input class="send submit" type="submit" name="submit_second" id="submit_second" value="" /> 

     </div><!--end of second step--> 

    </form> 

这里是我的jQuery的,我曾尝试合并这两个“submit_second”功能于一体的,但这种事情停止发生被点击第二提交按钮的时候!

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

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

    var emailPattern = /^[a-zA-Z0-9._-][email protected][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'); 
     } 



}); 
$('#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(dataString); 
      } 
     }); 
    return false; 

}); 

回答

0

好吧,所以经过很多修改代码并尝试相同的事情无数次后,我终于得到它的工作正是我想要的!

我已经将Ajax回调函数与验证检查一起放回到了一个方法中,并计算出我要出错的地方......语法错误!在Ajax调用提交数据之前,我忘记关闭用于验证检查的括号!我的错!我对此很新,尽管如此我只是很高兴终于有了它的工作!

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

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

    var emailPattern = /^[a-zA-Z0-9._-][email protected][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); 
      console.log("running"); 
      error++; 
     } else { 
      $(this).addClass('valid'); 
     } 
    }); 


    if(error==0) { 
    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: "http://clients.socialnetworkingsolutions.com/infobox/contact/", 
      data: "url="+url+"&yourname="+yourname+"&email="+email+'&phone=' + phone, 
      cache: false, 
      success: function(data) { 
       console.log("form submitted"); 
       alert(dataString); 
      } 
     }); 
    return false; 

    } 

}); 
0

如果您有一个提交按钮和一个提交事件,会更合乎逻辑吗? 然后提交功能将运行验证,并根据它的结果提交或不提交表格。