为什么不保存饼干?

时间:2011-09-22 17:53:10

标签: javascript

为什么在运行以下脚本时没有保存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&nbsp;&nbsp;<input type="text" id="name_field" /></label> <br/>
<input type="submit" value="submit" />
</form>
</body> 
</html>

1 个答案:

答案 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

相关问题