更新性反應來評論
首先,JavaScript不能成爲一個安全的驗證,原因是顯而易見的!它可以是顯示警報和通知的奇特方式,但只是糖!
實際驗證必須在PHP或其他服務器端語言以及數據庫端通過檢查和格式化值來完成!
這個簡單的腳本僅僅是您如何構建智能驗證器的演示,但當然這只是一個概念驗證!
DEMO:http://jsbin.com/aceze/29
$(function() {
$('#myform').submit(function() {
var error = false; // flag
$('.email,.digits,.empty,.some').each(function() {
var check = this.className;
if (check == 'empty') if (!checkEmpty(this.value)) error = true;
if (check == 'digits') if (!checkDigits(this.value)) error = true;
if (check == 'email') if (!checkEmail(this.value)) error = true;
if (check == 'some') if (!checkSome(this.value)) error = true;
if (error) {
$(this).css('border', '1px solid red');
} else {
$(this).css('border', '1px solid green');
}
});
if (error) {
return false;
}
});
});
然後關於<form>
動作,你不需要在它PHP頁面的路徑,但必須使用AJAX的使POST 或只是離開review.php
在哪裏看到下面的片段:
// FIRST SNIPPET action="#"
if (error == false) {
//if all is ok give our form it's php
$(this).attr('action','review.php');
} else {
// error
// place false here so the form don't submit if validation fail!
return false;
}
// SECOND SNIPPET action="review.php"
if (error == true) {
// form submit only if validation pass
return false;
}
// THIRD SNIPPET action="#" AJAX
if (error == false) {
// success
} else {
// error
}
// this false prevent the form submit in anycase, cause we use AJAX
return false;
爲什麼你認爲表單動作必須是PHP_SELF(具有相同的文件名)? – a1ex07 2010-05-10 21:48:13
如果我想讓PHP驗證返回的結果出現在同一頁面上(以及在發現錯誤時使用發佈的數據填充一次,則該操作必須位於同一頁面)。 – JM4 2010-05-10 22:14:20
我的首選方法是使用相同的PHP函數通過AJAX驗證服務器端和客戶端。只需將驗證功能包含在AJAX請求的頁面中,並在服務器端處理表單時再次執行這些功能。 – 2010-05-10 22:18:19