为什么我只将数组的最后一个元素作为输出?

时间:2015-12-25 17:16:09

标签: javascript arrays login

我尝试使用一个按钮显示登录系统,该按钮显示哪些用户在javascript中在线。 我键入一个名称并单击登录。 之后我可以选择显示在线用户列表或输入其他名称。 我想要的是,当我点击显示列表时,会显示在线用户列表(我登录的所有名称)。 问题是我只获得了我在列表中登录的姓氏。 所有其他名字都没有出现。

如果您运行下面的代码段并尝试登录多个名称,则只会获得您使用以下名称登录的姓氏:

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

</body>
</html>

我在这里做错了什么?

提前谢谢。

1 个答案:

答案 0 :(得分: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建议。