所以我有两个输入框,一个用于用户名,另一个用于密码。我想在登录后向用户显示输入,但出于某种原因,所有出现的内容都是:[object HTMLInputElement] [object HTMLInputElement]这是我的代码:
<!DOCTYPE html>
<meta charset="UTF-8">
<html lang="en-US">
<head>
<link rel="stylesheet" type="text/css" href="java.css">
</head>
<title>JAVA</title>
<body>
<form>
User name: <input id="uname"></input>
<br>
<br>
Password: <input id="pass"></input>
<button onclick="login()">Login</button>
</form>
<script>
var fname = document.getElementById("uname").value;//Username
var lname = document.getElementById("pass").value;//Password
// Check browser support
function login() {
if (typeof(Storage) != "undefined") {
// Store
localStorage.setItem("uname", uname);//Saves username
localStorage.setItem("pass", pass);//Saves password
// Retrieve
document.getElementById("uname").innerHTML = localStorage.getItem("uname");//Gets
document.getElementById("pass").innerHTML = localStorage.getItem("pass");//Gets
alert(uname + pass);//Shows account info
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Storage...";//Error
}
}
</script>
</body>
</html>
答案 0 :(得分:0)
问题似乎是您正在访问由浏览器设置的uname
和pass
自动全局变量,以表示具有id
个节点的节点;相反,您应该使用uname.value
和pass.value
(JS Fiddle demo),或者更好地使用您在代码中先前声明的变量(尽管它们已设置为{{的初始值) 1}}元素并没有自动更新,所以我在函数(JS Fiddle demo)中移动了它们。
答案 1 :(得分:0)
您正在存储实际的输入元素而不是它们的值。您将输入元素值分配给变量(fname和lname),然后存储元素(uname和pass)。
请尝试使用此代码:
// Store
localStorage.setItem("uname", fname);//Saves username
localStorage.setItem("pass", lname);//Saves password
&#13;
我会清理你的变量命名,以便名称更具描述性并与其功能相匹配。
此外,正如其他用户所说,将用户凭据存储在本地存储中并不是一种好习惯。
答案 2 :(得分:0)
你混淆了一些事情:
uname
和pass
,但您从未声明过这些变量(您已声明fname
和lname
)。login()
函数中声明这些变量,否则在用户实际在输入字段中输入值之前已经声明了这些变量。.value
代替.innerHTML
来设置输入元素的值。
以下是修复这些问题的代码:
小提琴:http://jsfiddle.net/rx0rjaf3/7/
<强> HTML 强>
<body>
<form>
Username: <input id="user" /><br /><br />
Password: <input id="pass" />
<button onclick="login()">Login</button>
</form>
</body>
input
个元素没有这样的结束标记:<input></input>
。相反,他们是这样的自我关闭:<input id="user" />
。<br />
代码(代替<br>
)。对于没有结束标记的其他元素也是如此。<强> JS 强>
function login() {
if (typeof(Storage) != "undefined") {
// Store
localStorage.setItem("user", document.getElementById("user").value); //Saves username
localStorage.setItem("pass", document.getElementById("pass").value); //Saves password
// Retrieve
var user = localStorage.getItem("user"); //Gets username
var pass = localStorage.getItem("pass"); //Gets password
document.getElementById("user").value = user;
document.getElementById("pass").value = pass;
alert("username: "+user+"\n"+"password: "+pass); //Shows account info
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Storage...";//Error
}
}
.values
存储到localStorage
,然后在localStorage
再次存储到.values
后立即 - 我假设确保它们已正确存储。vars
存储到.values
之前提醒您localStorage
,但现在您仍然无法确定它们是否已正确存储到localStorage
中{1}},你知道吗?通过将这些变量移动到Retrieve部分,此问题已修复。sessionStorage
代替localStorage
。这只是为了防止我,您和其他所有人的本地存储都没有填充测试值。作为最后的建议,我强烈建议您将用户名和密码存储在服务器上的数据库中,而不是客户端(无论是在localStorage,cookie,文本文件还是其他任何东西)!