2012-01-24 60 views
3

我有一個使用jQuery驗證插件客戶端驗證形式,並且通過AJAX提交。提交表單後,我希望重置它自己。我已經使用了.resetForm()方法重置等領域,其工作,但問題是驗證插件仍然會立即嘗試,當他們專注於驗證領域,並給予新的提交有機會進入自己的輸入之前給出了一個錯誤。jQuery驗證resetForm()不重置的onfocus驗證

實例流程圖:

  • 觸發驗證最初
  • 修復驗證,通過AJAX
  • 呼叫.resetForm()提交表單,字段被成功清除了
  • 嘗試重新填寫表格
  • 專注於一個領域(這在我的情況有電子郵件驗證)
  • 給你一個機會,進入輸入之前,VA蓋並說這是不正確的。

通常情況下,插件會讓你輸入你的輸入,然後告訴你它是不正確的。是否有任何方法可以真正重置表單,而不是再次進行焦點驗證,而不必一起關閉焦點驗證?

謝謝,這裏的清理/簡化代碼樣本!

// Validation 
    $('#registerForm').validate({ 
     submitHandler: function(form) { 

      $(form).ajaxSubmit({ 
       success: function(response) { 

        if(response == 'success') { 
         resetMyForm(); 
        } 
        else { 
         alert('unsuccessful'); 
        } 

       } 
      }) 
     } 
    }); 

}) 




function resetMyForm() { 

     $('#registerForm').resetForm(); 
     v.prepareForm(); // Tried adding this, no help 
     v.hideErrors(); // Tried adding this, no help 

} 
+0

當你的驗證觸發?在提交或聚焦? –

+0

它驗證兩個。 – Ryan

回答

5

你需要重新設置形式和運行這樣的驗證插件方法resetForm

var v = $("form").validate({ 
    submitHandler: function(form) { 
      //resetForm is a method on the validation object, not the form 
      v.resetForm(); 
      form.reset(); 
    } 
}); 

這似乎照顧我在遵循工作流程時看到的任何問題。看到這一點:http://jsfiddle.net/nxXNz/27/

+0

setTimeout固定它,爲我工作。 –

+3

如果你想這樣做,而不調用驗證功能,(如在一個jQuery UI模式對話框關閉),你可以使用這個:'$(「形式」)的數據(「驗證」)resetForm();'。 – JTech

0

試試這個事件的內容()

function resetMyForm() { 

    $('#registerForm').resetForm(); 
    v.prepareForm(); // Tried adding this, no help 
    v.hideErrors(); // Tried adding this, no help 
    $("ElementName").focusout(); // focus out which ever element you want 

}

+0

問題在於當表單被重置並清除後,用戶將重點放在輸入上,而不是驗證自動關注它。 – Ryan