jQuery Ajax提交表单问题

时间:2011-05-24 10:03:54

标签: jquery ajax

我使用jQuery验证了我的表单,应该使用ajax进行提交 问题是。如果没有输入任何输入或者用户没有输入错误的数据,输入应该打开红色它工作正常,但如果我点击输入以填写或编辑它就会丢失。

这是我的代码

$(document).ready(function(){
  // Place ID's of all required fields here.

  required=["name", "adres","huisnr","postcod", "phone","email"];

   name=$("#name");
   huisnr=$("#huisnr");
   email=$("#email");
   phone=$("#phone");
   postcod=$("#postcod");
   errornotice=$("#error");

   // The text to show up within a field when it is incorrect
     emptyerror="wrong";
    emailerror = "Invalid e-mail.";
     postcoderror="Invalid postcode.";
    phonerror = "Invalid phone number.";

    $(".submit").click(function(){
      //Validate required fields
      for(i=0;i<required.length;i++){
         var input=$('#'+required);

         if(input.val() == "" || input.val() == emptyerror){
            input.addClass("textfield error");
            input.val(emptyerror);
            errornotice.fadeIn(750);
         }else{
            input.removeClass("textfield error");
         }
      }

   //Validate the Postcode.first letter should not be 0, space then the two alphabit big letters from A-Z
          if(! postcod.val().match(/^([1-9]\d{3}\s[A-Z]{2})$/)){
           postcod.addClass("textfield error");
           postcod.val(postcoderror);
         }
   //Validate the phone      
          if(!phone.val().match(/^[0-9]{3}-|\s[0-9]{3}-|\s[0-9]{5}$/)) {
           phone.addClass("textfield error");
           phone.val(phonerror);
         }      

    // Validate the e-mail.
          if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email.val())) {
         email.addClass("textfield error");
         email.val(emailerror);
      }

   //if any inputs on the page have the class 'textfield error' the form will not submit
          if($(":input").hasClass("textfield error")){
             return false;
         }else{
              errornotice.hide();
             return true;
         }

      var dataString=   'name=' + name + '&huisnr=' + huisnr + '&email=' + email + '&phone=' + phone + '&postcod=' + postcod ;
      alert (dataString);


 $.ajax({   
  type: "POST",   
  url: "mail.php",   
  data: dataString,   
  success: function() {   
    $('#contact_form').html("<div id='message'></div>");   
    $('#message').html("<h2>Contact Form Submitted!</h2>")   
    .append("<p>We have received your order.</p>")   
    .hide()   
    .fadeIn(1500, function() {   
      $('#message').append("<img id='checkmark' src='images/check.png' />");   
  });
  }
 });
//cancel the submit button default behaviours 
    return false;      


});

   // Clears any fields in the form when the user clicks on them
       $(":input").focus(function(){
        if($(this).hasClass("textfield error")){
          $(this).val("");
          $(this).removeClass("textfield error");
        }
      });
});

HTML Form:
<form id="theform" action="mail.php" method="post">
                            <fieldset>
                                <legend></legend>
                                <table cellpadding="0" cellspacing="0" border="0" style="margin-top:7px;">
                                    <tr>
                                        <td><label for="">Name *</label></td>
                                        <td><input type="text" name="name" id="name" value="" class="textfield" tabindex="1" /></td>
                                    </tr>
                                    <tr>
                                        <td><label for="">Adres *</label></td>
                                        <td><input type="text" name="adres" id="adres" value="" class="textfield" style="width:160px; margin-right:10px;" tabindex="2" /> Huisnr. * <input type="text" name="huisnr" id="huisnr" value="" class="textfield" style="width:74px;" tabindex="3" /></td>
                                    </tr>
                                    <tr>
                                        <td><label for="">Postcode *</label></td>
                                        <td><input type="text" name="postcod" id="postcod" value="" class="textfield" maxlength="7" style="width:70px; margin-right:10px;" tabindex="4" /> 
                                    </tr>
                                    <tr>
                                        <td><label for="">Telefoonnummer *</label></td>
                                        <td><input type="text" name="phone" id="phone" value="" class="textfield" tabindex="6" /></td>
                                    </tr>
                                    <tr>
                                        <td><label for="">E-mailadres *</label></td>
                                        <td><input type="text" name="email" id="email" value="" class="textfield" tabindex="6" /></td>
                                        </tr>
                                        <tr>
                                        <td colspan="2" id="error">There were errors on the form, please make sure all fields are filled out correctly.</td>
                                    </tr>
                                </table>
                            </fieldset>
                        </form>
<div class="checkOut"><a href="" class="submit"><span>Submit Form</span></a><div class="spacer"></div></div>
                </div> 

3 个答案:

答案 0 :(得分:2)

单击输入字段时输入会丢失,因为你的代码中有一个onFocus监听器就是这样:

 $(":input").focus(function(){
        if($(this).hasClass("textfield error")){
          // here is your problem:
          $(this).val("");
          $(this).removeClass("textfield error");
        }
      });

答案 1 :(得分:0)

如果这可以解决问题,那么不是肯定的,但我注意到这一行是错误的:

var input=$('#'+required);

应该是required[i]

答案 2 :(得分:0)

您可以查看JQuery Ajax Form插件。为你照顾大部分的东西。 将“普通”转换为Ajax表单,对数据进行编码并发布。

您所要做的就是在表格帖子之前和之后创建您想要运行的功能。

http://jquery.malsup.com/form/