2013-04-18 40 views
0

我試圖驗證窗體中的多個字段。在大多數情況下,我的代碼似乎工作,但經過進一步測試,我注意到一些奇怪的行爲。無論出於何種原因,如果最後一個字段正在工作,我的表單似乎會經歷,在這種情況下,所有其他錯誤檢查都會被忽略另外在旁邊注意我的消息似乎沒有更新,錯誤提交後,再次提交不同的錯誤。 任何人都可以請向我解釋爲什麼會發生這種情況?Javascript錯誤檢查錯誤。 (表單驗證)

這裏是我的提交按鈕。

<button type="submit" onclick="return validateRegistrationForm()" > 
    Register 
</button> 

腳本:

function validateRegistrationForm() 
{ 
    return validateUsername(), validatePassword(), validateConfirmPassword(); 
} 

function validateUsername() 
{ 
    var x=document.forms["registration"]["userName"].value;if (x == null || x == "") 
    { 
     document.getElementById("usernameWarnings").innerHTML = "Username is Required!"; 
     return false; 
    } 
    else if (x.length < 6 || x.lenth > 10) 
    { 
     document.getElementById("usernameWarnings").innerHTML = "Must be Between 6 to 10 Characters!"; 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 

function validatePassword() 
{ 
    var y=document.forms["registration"]["userPassword"].value; 
    if (y == null || y == "") 
    { 
     document.getElementById("passwordWarnings").innerHTML = "Password is Required!"; 
     return false; 
    } 
    else if (y.length < 6 || y.lenth > 10) 
    { 
     document.getElementById("passwordWarnings").innerHTML = "Must be Between 6 to 10 Characters!"; 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 
function validateConfirmPassword() 
{ 
    var y=document.forms["registration"]["userPassword"].value; 
    var k=document.forms["registration"]["cUserPassword"].value; 
    if (k == null || k == "") 
    { 
     document.getElementById("confirmPasswordWarnings").innerHTML = "Confirm Password is Required!"; 
     return false; 
    } 
    else if (y != k) 
    { 
     document.getElementById("confirmPasswordWarnings").innerHTML = "Passwords not the same"; 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 
+2

到底是什麼這個'返回validateUsername(),validatePassword(),validateConfirmPassword();' – j08691

回答

2

我想你想:

return validateUsername() && validatePassword() && validateConfirmPassword(); 

&& s爲必要的,以確保所有條件都滿足。

UPDATE

並非所有錯誤信息被顯示出來,因爲JavaScript的「短路」的&&運算符。這意味着如果&&的左側評估爲false,則右側將不會運行(因爲此時操作的輸出保證爲false)。這裏是你如何能確保他們都執行:

function validateRegistrationForm() { 
    var valid = true; 
    valid = validateUsername() && valid; 
    valid = validatePassword() && valid; 
    valid = validateConfirmPassword() && valid; 
    return valid; 
} 
+0

我想這和它修復我的問題(謝謝!)但是它會產生一個不同的問題,現在它一次只顯示一條錯誤消息。我猜我的邏輯中還是有其他問題。 – NateDM

+0

我已更新我的解決方案以解決您的最新評論。新代碼將確保您的所有驗證都已運行,並且將顯示所有錯誤消息。 – mchail

+0

這是行得通的,謝謝你的幫助,也沒關係,而是你在文章中錯過了()的validateConfirmPassword()。再次感謝您的幫助和解釋。 – NateDM