[英]validating form before it submit
我在做什么
我正在使用jquery來驗證表單,然后再將其發送到服務器。
我正在驗證每個輸入,如果其中任何一個返回false,則調用event.preventDefault()
並顯示錯誤。(如果返回true,則不執行任何操作...)
問題
它運行良好,腳本始終在表單發送之前運行,但是現在我正在使用ajax
驗證電子郵件-檢查db中是否已經沒有電子郵件或域是否存在...但是當ajax
啟動時,表單不會等到它完成並在ajax
完成和輸入驗證之前發送自己。
可能有一些解決方案
我可以調用event.preventDefault()
和驗證完成后,它我可以嘗試撤消返回true preventDefault
通過perhabs unbind
,然后submit
通過jQuery的再次提交表單。
或者我可以做onsubmit="checkInputs();"
它應該等到它返回true或false ...
解決方案 -改編自用戶Mirage接受的答案
function validate(){
$.ajax({
url: 'http://google.nl',
async: false,
type: "POST",
data: {test:'request'},
success: function(data){
console.log(data);
}
});
return data; // important
}
嘗試添加
async: false
例:
$.ajax({
url: 'http://google.nl',
async: false,
type: "POST",
data: {test:'request'},
success: function(data){
console.log(data);
}
});
你要:
onsubmit="checkInputs(); return false;"
然后,您將獲取表格,例如:
var frm = document.getElementById("myfrm");
frm.submit();
您可以將以上內容置於驗證邏輯的else條件中。 希望這可以幫助。
您的腳本流應如下所示:
並在代碼中:
var handleValidationResponse = function(data) {
if(data.errors != 0) {
alert('Sorry my dear user, but you made a mistake');
return false;
}
// aight, so it's all fine
$('#myForm').off('submit').trigger('submit'); // unbind custom submit handler and post the form
};
$('#myForm').on('submit', function(e) {
e.preventDefault();
var $this = $(this);
var serializedFormData = $this.serializeArray();
$.post($this.attr('action'), serializedFormData, function(data) {
handleValidationResponse(data);
});
});
就是這樣!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.