2012-02-20 139 views
1

編輯最終: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; 

}) 
}); 
+0

不應該停止工作的警報,但你有錯誤那裏與錯誤= +1而不是errs + = 1。 – 2012-02-20 13:26:55

回答

0

看起來像你需要周圍的+開關和=你的。每()

if (!checkfield(this)) errs += 1; 
+0

啊是的,有點小錯誤,沒有得到它的測試,因爲它不是原因它不起作用,但謝謝! – 2012-02-20 13:33:45

0

布拉德·福爾克指出,你應該使用errs += 1而非errs =+1。但是,還有一些其他錯誤。

您在調用.each()之後缺少分號。這是我能看到的唯一可能導致你的問題。

除此之外,您的return false不是if語句塊的一部分,所以即使沒有驗證錯誤,它也會始終阻止表單提交 - 這可能是您想要的,但是因爲我無法看到任何有關AJAX帖子的證據都可能導致您未來的問題。

+0

謝謝,有點馬虎我,想測試沒有測試的回報,忘了但它回來了,還請你照顧你提到的其他錯誤,不能讓它工作,但..也許它是在檢查字段後所有,我將用代碼 – 2012-02-20 13:54:46

+0

更新我的問題首先要檢查的是,您沒有在瀏覽器中顯示任何Javascript錯誤。如果您使用的是Firefox,但您還沒有安裝它,我建議安裝Firebug。 – 2012-02-20 13:56:37

+0

謝謝,我在html和css上使用它,從來沒有使用它的JavaScript,不知道如何,但我會在網上尋找教程:) – 2012-02-20 14:12:31