2016-11-11 217 views
-5

我正在嘗試一個HTML/JS登錄系統(這只是一種學習體驗,不能用於真實案例)有一條if語句應該在有人輸入正確的用戶名和密碼時返回true,但返回false,我找不到原因。 這裏是我使用的代碼:javascript「if」語句在兩個值相等時返回false值

var count = 2; 
 

 
function validate() { 
 
    var un = document.login.username.value; 
 
    var pw = document.login.password.value; 
 
    var valid = false; 
 
    var usernameArray = ["Adam", "Adam2"]; 
 
    var passwordArray = ["12345", "54321"]; 
 
    for (var i = 0; i < usernameArray.length; i++) { 
 
    if ((un == usernameArray[i]) && (pw == passwordArray[i])) { 
 
     valid = true; 
 
     break; 
 
    } 
 
    if (valid) { 
 
     alert("Logging in..."); 
 
     window.location.href = "http://www.google.com"; 
 
     return false; 
 
    } 
 
    var again = " tries"; 
 
    if (count == 1) { 
 
     again = " try"; 
 
    } 
 
    if (count >= 1) { 
 
     alert("Username and password do not match."); 
 
     count--; 
 
    } else { 
 
     alert("Username and password do not match. You are now blocked.") 
 
     document.login.username.value = "You are now blocked"; 
 
     document.login.password.value = "You can not see this"; 
 
     document.login.username.disabled = true; 
 
     document.login.password.disabled = true; 
 
     return false; 
 
    } 
 
    } 
 
}
<div class="container"> 
 
    <div class="header"> 
 
    <h1>Login Page</h1> 
 
    </div> 
 

 
    <form name="login" onsubmit="return validateForm();" method="post"> 
 

 
    <ul> 
 
     <li>Username: 
 
     <input class="username" type="text" name="username"> 
 
     </li> 
 

 
     <li>Password: 
 
     <input class="password" type="password" name="password"> 
 
     </li> 
 
    </ul> 
 

 
    <input type="button" class="submit" value="Login" name="submit" onclick="validate()"> 
 
    </form> 
 
</div>

+1

你有[檢查你的錯誤控制檯?(http://stackoverflow.com/documentation/javascript/185/getting-started-with-javascript/714/using-console -log) –

+5

'break;'嗯.....我想知道那是什麼。 –

+2

在if語句之外擁有第二個value = true;將認爲任何用戶(無論憑證是否匹配)都是有效的。我希望這是測試,因爲我不認爲這是你想要的。 – War10ck

回答

1

您正在打破循環,並且您的if(valid)代碼位於for循環內。您可能打算在for循環範圍之外有if(valid)

例如,你可以這樣做:

valid = false; 

for (var i = 0; i < usernameArray.length; i++) { 
    if ((un == usernameArray[i]) && (pw == passwordArray[i])) { 
     valid = true; 
     break; 
    } 
} 

if (valid) { 
    alert("Logging in..."); 
    window.location.href = "http://www.google.com"; 
    return false; 
} 

通知我關閉了for循環。

另請注意,在if聲明後面有一個valid=true。我假設你是爲了調試目的而做的,但一定要刪除它。

+0

'for(var i = 0,len = usernameArray.length; i War10ck

+0

@ War10ck不是真的。除非您隨時修改長度,否則開始時並不昂貴。考慮到你的想法,我不希望你這樣做。這只是老IE瀏覽器中的一個「問題」。 – vlaz

+0

@vlaz不知道你的緩存。它只是存儲長度。我同意,在這種情況下,它不是一個巨大的顯着差異,在視覺上你不會注意到任何速度的增加,但它仍然是更有效的預先caclulate陣列長度呢... – War10ck

-3

這是落實在客戶端的JavaScript登錄一個非常糟糕的主意。任何人都能看到你的密碼。

這就是說,你的問題是你一找到匹配的用戶名和密碼就退出循環。所以你的if語句永遠不會被達到。

+0

來消除循環的需要。在表單嘗試提交給服務器之前觸發'onsubmit'事件時''validate()'函數應該運行... – War10ck

+0

呃,真的,我讀的代碼太快了。 – lovasoa

+0

你如何建議我這樣做? – Ninjakid

1

它在你的for循環。有效憑證檢查後的邏輯位於錯誤的地方,它應該在for循環之外。

var count = 2; 
 

 
function validate() { 
 
    var un = document.login.username.value; 
 
    var pw = document.login.password.value; 
 

 
    var valid = false; 
 
    var usernameArray = ["Adam", "Adam2"]; 
 
    var passwordArray = ["12345", "54321"]; 
 
    for (var i = 0; i < usernameArray.length; i++) { 
 
    if ((un == usernameArray[i]) && (pw == passwordArray[i])) { 
 
     valid = true; 
 
     break; 
 
    } 
 
    } 
 

 
    if (valid) { 
 
    alert("Logging in..."); 
 
    window.location.href = "http://www.google.com"; 
 
    return false; 
 
    } 
 
    var again = " tries"; 
 
    if (count == 1) { 
 
    again = " try"; 
 
    } 
 
    if (count >= 1) { 
 
    alert("Username and password do not match."); 
 
    count--; 
 
    } else { 
 
    alert("Username and password do not match. You are now blocked.") 
 
    document.login.username.value = "You are now blocked"; 
 
    document.login.password.value = "You can not see this"; 
 
    document.login.username.disabled = true; 
 
    document.login.password.disabled = true; 
 
    return false; 
 

 
    } 
 
}
<div class="container"> 
 
    <div class="header"> 
 
    <h1>Login Page</h1> 
 
    </div> 
 

 
    <form name="login" onsubmit="return validateForm();" method="post"> 
 

 
    <ul> 
 
     <li>Username: 
 
     <input class="username" type="text" name="username"> 
 
     </li> 
 

 
     <li>Password: 
 
     <input class="password" type="password" name="password"> 
 
     </li> 
 
    </ul> 
 

 
    <input type="button" class="submit" value="Login" name="submit" onclick="validate()"> 
 
    </form> 
 
</div>