为什么在运行以下脚本时没有保存cookie:
window.onload=init;
function init() {
var userName="";
if(document.cookie != "") {
username=document.cookie.split("=")[1];
}
document.getElementById("name_field").value = username;
document.getElementById("name_field").onblur = setCookie;
}
function setCookie() {
var exprDate = new Date();
exprDate.setMonth(exprDate.getMonth() + 6);
var userName = document.getElementById("name_field").value;
document.cookie = "username=" + username + ";path=/;expires=" + exprDate.toGMTString();
}
当我刷新页面时,text-field
变空了?为什么会这样?
的 HTML
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="writing_cookie.js">
</script>
</head>
<body>
<form>
<label>Enter your name <input type="text" id="name_field" /></label> <br/>
<input type="submit" value="submit" />
</form>
</body>
</html>
答案 0 :(得分:0)
正如@pimvdb所说,你混合了用户名的情况。
在javascript中,内容区分大小写 - userName 与 username 不是同一个变量,所以你需要与你的外壳保持一致。
具体问题是您在setCookie()中将name_field的值分配给 userName ,但在下一行中将 username 保存到cookie中。 用户名未初始化,因此您将空值保存到Cookie中。这个空值是你从init()
中的cookie得到的此外,在init()中,您声明 userName ,但将cookie的值分配给 username 。这实际上不会导致问题,但它可以修复所有相同的问题。
编辑 - 我刚刚看到您对@ pimvdb评论的回复并做了一些研究:
在阅读cookie时,您需要拆分“;”,而不是“=”。然后,这将为您提供“username = username”,“path = path”和“expires = date”的数组。然后,您将通过查找“=”
从数组的第一个元素中提取用户名您的代码在“=”上拆分,这将提供“username”,“ username ; path”,“/; expires”和“ date ”的数组。
我原以为它会在你的代码的文本字段中添加一些东西(在修复了外壳问题之后)。
(参考页here)