2012-07-31 106 views
0

我無法正常工作。它按預期驗證字段,但無論我嘗試什麼,我都無法正確掛接提交。Ajax驗證後提交(jQuery Mobile + Validator)

這裏是我的形式:

<form action="" id="m-frm-contact_us" class="m-contact_submit" method="post" data-ajax="false"> 
    <input type="text" name="firstName" placeholder="FIRST NAME" title="" id="first" class="contact full required" minlength="2" maxlength="36" /> 
    <input type="text" name="lastName" placeholder="LAST NAME" id="last" class="contact full required" minlength="2" maxlength="36" /> 
    <input type="email" name="mail" placeholder="E-MAIL ADDRESS" id="mail" class="contact full required email" /> 
    <button type="submit" name="submit_contact" value="clicked">Submit</button> 
</form> 

我的JS:

$(document).ready(function(){ 
    $.validator.addMethod(
     'placeholder', function(value, element) { 
      return value != $(element).attr("placeholder"); 
     }, 'This field is required.' 
    ); 

    $("#m-frm-contact_us").validate({ 
     rules: { 
      firstName: { 
       required: true, 
       minlength: 5, 
       placeholder: true 
      }, 
      lastName: { 
       required: true, 
       minLength: 5, 
       placeholder: true 
      }, 
      mail: { 
       required: true, 
       email: true, 
       placeholder: true 
      } 
     }, 
     messages: { 
      firstName: "First name is required.", 
      lastName: "Last name is required.", 
      email: "Valid email address is required." 
     }, 
     submitHandler: function(form) { 
      console.log('submitHandler fired.'); 
      contact.submit(); 
      return false; 
     } 
    }); 

    $('#m-frm-contact_us').submit(function(e){ 
     console.log('Submit event fired.'); 
     e.preventDefault(); 
     return false; 
    }); 

    var contact = { 
     submit : function(){ 
      console.log('Form is being submitted.'); 
     } 
    }; 
}); 

我在控制檯中看到的唯一事情是 '提交觸發的事件',呼籲提交表單。儘管我付出了很多努力,但表單總是會嘗試自行發佈,重新加載頁面。

我想執行的提交驗證碼:

var contact = { 
    submit : function(){ 
     console.log('Form is being submitted.'); 
     var _this = this, 
     post = $.post("/path/to/submit.php", $("#m-frm-contact_us").serialize(), function(response){ 
      try{ 
       if(response==1) { 
        _this.passed(); 
       } else { 
        _this.error(); 
       } 
      } 
      catch(e){ 
       if(typeof e == 'string') console.log(e); 
       _this.error(); 
      } 
     }); 
    }, 
    error : function(){ $.mobile.changePage("#error"); }, 
    passed : function(){ $.mobile.changePage("#passed"); } 
} 

我缺少什麼?

回答

0

我重建了JS,並能夠得到這個工作。下面的代碼,如果任何人遇到了類似的問題:

形式:

<form action="" method="post" id="m-frm-contact_us" novalidate="novalidate"> 
    <input type="text" name="firstName" placeholder="FIRST NAME" title="" id="first" class="contact full required placeholder noSpecial" minlength="2" maxlength="36"> 
    <input type="text" name="lastName" placeholder="LAST NAME" id="last" class="contact full required placeholder" minlength="2" maxlength="36"> 
    <input type="email" name="mail" placeholder="E-MAIL ADDRESS" id="mail" class="contact full required email"> 
    <button type="submit" name="submit_contact" value="clicked">Submit</button> 
</form> 

JS:

$.validator.addMethod('noPlaceholder', function(value, element) { 
    return value !== element.defaultValue; 
}, 'This field is required.'); 
$.validator.addMethod(
    'placeholder', function(value, element) { 
     return value != $(element).attr("placeholder"); 
    }, 'This field is required.' 
); 
$.validator.addMethod("regex", function(value, element, regexp) { 
    var check = false; 
    var re = new RegExp(regexp); 
    return this.optional(element) || re.test(value); 
}, "No special Characters allowed here. Use only upper and lowercase letters (A through Z; a through z)"); 

$('#m-frm-contact_us').submit(function(event) { 
    event.preventDefault(); 

    if($(this).validate({ 
     rules : { 
      first_name : { 
       required : true, 
       maxlength : 36, 
       regex : /^[A-Za-z\s`'"\\-]+$/ 
      }, 
      last_name : { 
       required : true, 
       maxlength : 36, 
       regex : /^[A-Za-z\s`'"\\-]+$/ 
      } 
     } 
    }).form()) { 
     var $form = $(this), formData = { 
      firstName : $form.find('#first').val(), 
      lastName : $form.find('#last').val(), 
      mail : $form.find('#mail').val() 
     }; 
     $.post('/path/to/submit.php', formData, function(response) { 
      if(response == 1) { 
       $.mobile.changePage("#passed"); 
      } else { 
       $.mobile.changePage("#error"); 
      } 
     }) 
    }; 

    return false; 
}) 
+0

你做了什麼? – Jasper 2012-07-31 18:58:50

+0

我沒有驗證器處理提交事件,而是指驗證的狀態,並運行我的ajax,如果驗證沒有錯誤。在我以前的方法中,提交事件是不可靠的,並且我有一種感覺我在調用我的ajax函數時正在失去範圍。 – Steve 2012-08-01 19:57:18