2015-12-25 89 views
-1

我試着用一個按鈕來顯示哪些用戶使用javascript在線登錄系統。 我鍵入一個名稱並單擊登錄。 之後,我可以選擇顯示在線用戶列表或輸入其他名稱。 我想要的是,當我點擊顯示列表時,在線用戶列表(我登錄的所有名稱)顯示出來。 問題是,我只收到我在列表中登錄的姓氏。 所有其他名稱不顯示。爲什麼我只將數組的最後一個元素作爲輸出?

如果您運行下面的代碼片段,並嘗試登錄多個名稱,你將只能得到你登錄時使用的姓氏:

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
\t <meta charset="utf-8"> 
 
\t <title>javascript</title> 
 
\t <link href="" rel="stylesheet"> 
 
\t 
 
\t <script type="text/javascript"> 
 
\t \t var playerlist; 
 
\t \t 
 
\t \t function login(){ 
 
\t \t \t var player = document.getElementById('loginField').value; 
 
\t \t \t var players = new Array(); 
 
\t \t \t players.push(player); 
 
\t \t \t playerlist = players.join("<br>"); 
 
\t \t } 
 
\t \t 
 
\t </script> 
 
</head> 
 
<body> 
 
\t <input type="text" id="loginField" placeholder="Username:"> 
 
\t <input type="button" value="Login" onclick="login()"> 
 
\t <input type="button" value="Show List" onclick="showlist()"><br> 
 
\t <script type="text/javascript"> 
 
\t \t function showlist(){ 
 
\t \t \t document.write(playerlist); 
 
\t \t } 
 
\t </script> 
 

 
</body> 
 
</html>

我到底錯在這裏做什麼?

預先感謝您。

回答

4

因爲每次調用login方法時都會創建一個新陣列。所以你丟失了前面的數組,而你之前推過一些字符串。

將數組聲明移到方法外部,以便它保持在對您的登錄方法的多次調用之間。

var players = []; 
function login() 
{ 
    var player = document.getElementById('loginField').value; 
    players.push(player); 
    playerlist = players.join("<br>"); 
} 

我也改變了new Array()[]。兩者相同,但crockford(json的創建者suggests使用[]。感謝@Rayon Dabre提出的建議。

+2

啊我明白了。非常感謝。 –

+0

克羅克福德不喜歡'新Array()'你知道:) – Rayon

+0

不錯。切勿閱讀http://javascript.crockford.com/code.html。謝謝你提到它。我更新了包含該建議的答案。 – Shyju

相關問題