我做這樣說:如何在jQuery中提交之前通過ajax驗證表單?
...submit(function() {
$.post(...,function() {
validate();
})
});
但事實證明的形式直接提交...
我做這樣說:如何在jQuery中提交之前通過ajax驗證表單?
...submit(function() {
$.post(...,function() {
validate();
})
});
但事實證明的形式直接提交...
你必須抓住每一個元素,並通過您的驗證運行它,然後稍後提交表格。
使用$(id).value
(對於id-d元素)或yourForm.someElementName.value
(對於名稱爲d的元素,假設您的表單爲name
和yourForm
)。
你需要阻止默認表單提交
http://api.jquery.com/event.preventDefault/
$("form").submit(function(event){
event.preventDefault();
if(valid())
{
$.post . . .
}
});
下面是一個例子就如何可以使用:
$("#myForm").validate({
rules: {
command: 'required'
},
messages: {
command: 'Please enter a command.'
},
submitHandler: function(form) {
$(form).ajaxSubmit({
success: function(data) { /* ... */ },
url: form.action,
dataType: 'json'
});
}
});
它支持服務器端驗證嗎? – ajx 2010-11-19 02:36:44
不,通常正確的方法是首先進行客戶端驗證,因爲它更快,然後*提交表單,或者返回成功響應(可能會重定向用戶)或錯誤,然後處理通過你的成功回調。 如果大多數客戶端啓用了JavaScript,服務器端驗證可能會像返回「某些字段無效」一樣簡單 - 就像錯誤一樣,並依靠客戶端驗證冗餘錯誤 – ThiefMaster 2010-11-19 11:44:55
+1來驗證客戶端。 99%的客戶確實啓用Javascript,因此可以處理客戶端的漂亮和有意義的驗證錯誤。在某些情況下,您沒有選擇,但必須在服務器端複雜的業務邏輯(即訪問Db等) – 2013-07-12 09:02:17
如果你想AJAXily做服務器端驗證,而無需繳納形式到另一個頁面,你可以做這樣的事情。您可以改爲將「提交」按鈕設爲「按鈕」類型,而不是將驗證操作綁定爲提交,然後將驗證綁定到其單擊事件。一旦它通過驗證,那麼你可以繼續前進。
例如:
$('#myPseudoSubmitButton').click(function() {
// Send the form to the server side for validation
$.post('validation_script.php', { form inputs here }, function(data) {
if (data.validated) {
// Perform some functionality that happens when the form validates
}
else {
// Display an error message to the user
}
});
}, 'json');
這當然前提是你的驗證腳本返回JSON格式的數據與「驗證」屬性。
我以某種方式感覺他在做服務器端驗證..即提交表單兩次:一次用於驗證,一次用於實際處理。國際海事組織這是可怕的(但struts-jquery插件也做這樣的事情);請參閱我的答案以獲得更好的客戶端驗證解決方案。 – ThiefMaster 2010-11-19 01:46:29
是的,我正在做服務器端驗證。 – ajx 2010-11-19 02:32:53