2013-03-03 139 views
4

我想在使用Ajax請求將表單提交到我的php腳本之前驗證我的表單。我已經通過stackoverflow看,並沒有發現有用的東西。我仍然對jQuery感到陌生,對我如此光禿禿的。在通過Ajax請求提交之前使用jQuery進行表單驗證

我有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

+0

僅供參考,您可以鏈接的東西'$( '#messageResponse')淡入(1000 ).html(responseData);' – Popnoodles 2013-03-03 02:44:12

+0

感謝您的提示! – fryvisuals 2013-03-03 02:56:10

+0

使用jQuery Validate插件時,您的'ajax'函數進入內置的'submitHandler'回調函數,該回調函數僅在有效表單上觸發。請參閱:http://docs.jquery.com/Plugins/Validation/validate#toptions – Sparky 2013-03-03 06:00:00

回答

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(""); 
+0

當jQuery Validate插件已經有內置的提交處理程序時,不需要使用'submit'處理程序。內置的'submitHandler'僅在有效的表單上觸發。 – Sparky 2013-03-03 05:43:17

+0

@Sparky OP沒有指定返回$('form')。validate();'是,但是如果他/她確認它是jQuery Validate插件,那麼沒有理由不更新答案。 – Popnoodles 2013-03-03 18:12:01

+0

第二次看,我同意......'.validate()'是jQuery Validate插件並不完全清楚。我要回滾我的標籤編輯並詢問OP。 – Sparky 2013-03-03 18:17:34

4

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

如果是這樣,也絕對在使用submit處理程序時,jQuery驗證插件已經有提交建在事件處理的回調函數是沒有意義的,而這正是你在哪裏應該把你的阿賈克斯。

As per the documentation for the Validate plugin,該submitHandler回調函數是:

「回調處理實際當表單有效提交獲取 形式作爲唯一的參數替換默認提交右 。驗證後,通過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/

+0

您還應該使用回調函數:「invalidHandler:function(event,validator)var errors = validator.numberOfInvalids(); if(errors){ // show messages,etc ...} }」來處理形成錯誤。 – Cairo 2016-04-19 20:24:36

+0

@Cairo,這是絕對不必要的,因爲插件會自動**顯示驗證錯誤消息。 – Sparky 2016-04-20 01:06:27

+0

我只想指出該處理程序的存在,但是,它絕對是可選的。 – Cairo 2016-04-25 16:03:46

相關問題