2015-10-11 202 views
2

我想在使用javascript的表單中驗證3個輸入(名稱,電子郵件和密碼)。當用戶提交表單並且所有字段都爲空時,它可以正確顯示錯誤消息。但是如果我寫了一個正確的密碼(長度爲7)以及錯誤的電子郵件和名稱,並且我嘗試再次提交表單,那麼「密碼太短」的消息是stil,密碼是正確的。我做錯了什麼?使用javascript驗證表單

JavaScript文件

function verify(){ 
    if(verName()&verEmail()&verPassword()) 
    { 
     return true; 
    }else 
    { 
     verName(); 
     verEmail(); 
     verPassword(); 
     return false; 
    } 
} 



function verPassword(){ 
    var ok = true; 
    var frm = document.getElementById("register"); 
    var pass = frm.elements[2].value; 
    if(pass.length<6) 
    { 
     var text="Password too short"; 
     document.getElementById('textPassword').innerHTML=text; 
     ok = false; 
    } 
    return ok; 
} 

HTML文件

<form id='register' name='register' onsubmit="return verify()"> 
+0

先清除錯誤,然後調用驗證功能。 – kannan

+0

document.getElementById('textPassword')。innerHTML =''; – kannan

+0

你是什麼意思?我是編程新手 – v8rs

回答

3
function verify(){ 
     document.getElementById('textPassword').innerHTML = ' '; 
if(verName()&verEmail()&verPassword()) 
{ 
    return true; 
}else 
{ 
    verName(); 
    verEmail(); 
    verPassword(); 
    return false; 
} 

}

0

改變你的代碼是這樣的:

function verify(){ 
if(verName()&verEmail()&verPassword()) 
    { 
     return true; 
    } 
    else 
    { 
    if(verName()); 
     if(verEmail()); 
      if(verPassword()); 
    return false; 
    } 
} 

與此解決方案,每個驗證發生,如果以前未確認運行真!如果沒有,只是以前的驗證錯誤出現!

在每個功能verName(),verEmail()和verPassword()

,返回TRUE的FALSE

布爾值,也加入這行代碼,你的表格上提交事件:

verify() { 
document.getElementById('textPassword').innerHTML= ' ' 
.... 
.... 
} 
0

問題是,當密碼無效時,您的verPassword函數會添加該錯誤字符串,但當密碼有效時它不會將其刪除。

此外,您的驗證功能沒有多大意義。

如何:

function verify(){ 
    return verName() && verEmail() && verPassword(); 
} 

function verPassword(){ 
    var frm = document.getElementById("register"); 
    var pass = frm.elements[2].value; 
    var ok = pass.length > 5; 
    var text = ok ? "" : "Password too short"; 

    document.getElementById('textPassword').innerHTML=text; 

    return ok; 
} 
0

你必須空通過寫類似的#textPassword元素:document.getElementById('textPassword').innerHTML

另外我可以看到一些錯誤的代碼。首先,如果每個ver *函數返回true或false,則最好在條件表達式中使用&& rather than &。或者,您可以像這樣返回條件表達式的評估值:return verName() && verEmail() && verPassword()

二,如果評估條件表達式已經調用ver *函數。不需要在其他部分再次調用這些函數。

而我不認爲你需要ok變量verPassword()函數。

我建議改變像下面的代碼:

function verify(){ 
    return verName() && verEmail() && verPassword(); 
} 

function verPassword(){ 
    var frm = document.getElementById("register"); 
    var pass = frm.elements[2].value; 
    var textPassword = document.getElementById('textPassword'); 
    if (pass.length < 6) { 
     var text="Password too short"; 
     textPassword.innerHTML = text; 
     return false; 
    } else { 
     textPassword.innerHTML = ""; // Empty #textPassword 
     return true; 
    } 
}