編輯最終:OMG,我終於找出了什麼出錯!我幾乎不能相信,我正在測試這個8小時不停,最後......我仍然不確定什麼,怎麼樣,爲什麼,但似乎由於某種原因(我認爲)我不能對於重新變量有不同的值,因爲有不同的字段,1次,它是一個文本,另一次是一個數字,例如,如果我爲每個可能的正則表達式定義不同的變量而不是重新定義它,那裏沒問題! o.OjQuery,表單驗證,驗證每個字段後的消息
我已經發布,我現在使用的回覆下,這個帖子
感謝這麼多的人有花一些時間閱讀和思考這個代碼!
如果有人對它出錯的想法,我很感興趣!
原題:
找不到邏輯,爲什麼這不會工作..我有,我想驗證,每個字段應該驗證的onblur形式:完美的作品,在提交應驗證每個字段:工作完美,當出現某種錯誤時,它應該顯示一條消息並返回false:不起作用。由於某種原因,提交函數不希望在.each之後執行任何操作,它甚至不會工作當我沒有做任何錯誤檢查,只想在每個.each後警告。
編輯:在提及一些小錯誤之後,它不幸仍然不會工作..這裏是總代碼,包括檢查字段功能(錯誤信息在荷蘭語,如果你想知道;))
編輯2:經過更多的測試,似乎它不是因爲checkform函數,但與正則表達式測試(如果(!re.test(fieldvalue)))得到的代碼卡住..不能找到問題雖然..任何想法將不勝感激!
編輯3:爲什麼不會與正則表達式的checkfield函數不循環與.each ??任何人??我真的很絕望.. -.-的作品
function trim(str){
return str.replace(/^\s+|\s+$/g, '');
}
function checkfield(field){
var output = 'validate' + $(field).attr("name");
var type = $(field).attr("type");
if ($(field).hasClass('required')){var required = 1;}
//set patterns for different types
if (type == 'text') { var re = /^[A-Za-z0-9 -._]+$/;}
if (type == 'number') { var re = /^[\d -.]+$/;}
if (type == 'email') { var re = /^[\w-_.][email protected][\w]+\.[\w]*\w\w$/;}
if (type == 'date') { var re = /^[0-3][0-9][\/-][0-1][0-9][\/-](19|20)[0-9][0-9]$/;}
var fieldvalue = trim(field.value); //trim value of input
if (required == 1 && emptyString.test(fieldvalue)) { //is required field filled in? if no, return false
$('#'+output).html('Invullen van onderstaand veld is verplicht!');
field.focus();
return false;
}
else if (fieldvalue != "" && type != '' && !re.test(fieldvalue)) { //input according to pattern? if no: place message, return false
if (type == 'email') {$('#'+output).html('Dit is geen correct e-mailadres!');}
else if (type == 'date') {$('#'+output).html('Dit is geen correcte datum!');}
else {$('#'+output).html('U gebruikt tekens die niet zijn toegestaan!');}
field.focus();
return false;
}
else if (fieldvalue != ""){ //when no error and filled in, empty messagebox, return true
$('#'+output).html('');
return true;
}
else if (required == 0 && fieldvalue == ""){//is empty but not required, empty messagebox, return true
$('#'+output).html('');
document.getElementById(output).innerHTML = '';
return true;
}
}
$(document).ready(function(){
$("#userform input").blur(function(){
checkfield(this);
})
$("#userform").submit(function(){
var errs = 0;
$("#userform input").each(function(){
if (!checkfield(this)) errs +=1;
});
if (errs>0) {alert('one or more fields are not correctly filled in'); return false;}
})
});
新的代碼!
如果有人喜歡用一個簡單的表單驗證,隨時;)(空格不完全不錯,但那是怎麼一回事,因爲我的代碼編輯器具有比本網站不同的規則。)
function trim(str){
return str.replace(/^\s+|\s+$/g, '');
}
function checkfield(field){
var output = 'validate' + $(field).attr("name");
var type = $(field).attr("type");
if ($(field).hasClass('required')){var required = 1;}
var re_text = /^[A-Za-z0-9 -._]+$/;
var re_number = /^[\d -.]+$/;
var re_email = /^[\w-_.][email protected][\w]+\.[\w]*\w\w$/;
var re_date = /^[0-3][0-9][\/-][0-1][0-9][\/-](19|20)[0-9][0-9]$/;
var emptyString = /^\s*$/ ;
var error = 0;
var fieldvalue = trim(field.value); //trim value of input
if (required == 1 && emptyString.test(fieldvalue)) { //is required field filled in? if no, return false
$('#'+output).html('Invullen van onderstaand veld is verplicht!');
field.focus();
return false;
}
else if (!emptyString.test(fieldvalue)){
if (type == 'text'){
if (!re_text.test(fieldvalue)) {
$('#'+output).html('U gebruikt tekens die niet zijn toegestaan!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
if (type == 'number'){
if (!re_number.test(fieldvalue)) {
$('#'+output).html('U gebruikt tekens die niet zijn toegestaan!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
if (type == 'email'){
if (!re_email.test(fieldvalue)) {
$('#'+output).html('Dit is geen correct e-mailadres!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
if (type == 'date'){
if (!re_date.test(fieldvalue)) {
$('#'+output).html('Dit is geen correcte datum!');
error = 1;
field.focus();
return false;
}
else {$('#'+output).html(''); return true; }
}
}
else if (required == 0 && emptyString.test(fieldvalue)){//is empty but not required, empty messagebox, return true
$('#'+output).html('');
document.getElementById(output).innerHTML = '';
return true;
}
}
$(document).ready(function(){
$("#userform input").blur(function(){
checkfield(this);
})
$("#userform").submit(function(){
var errs = 0;
$("#userform .form").each(function(){
if (!checkfield(this)) errs +=1;
//checkfield(this);
});
if (errs>0) {alert('one or more fields are not correctly filled in'); return false;}
//alert(errs); return false;
})
});
不應該停止工作的警報,但你有錯誤那裏與錯誤= +1而不是errs + = 1。 – 2012-02-20 13:26:55