2011-09-22 103 views
0

为什么没有饼干保存当我运行下面的脚本:为什么不保存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

'userName'被引用为'username'两倍 - 是吗? – pimvdb

+0

@ pimvdb No.I纠正了,但没有任何变化 –

+0

对大小写问题修复很有帮助。 http://jsfiddle.net/hEXKe/ – James

回答

0

由于@pimvdb说,你混的用户名的情况。

在JavaScript中,事情是区分大小写 - 的userName并不像用户名所以你需要与你的外壳被consitant相同的变量。

的具体问题是,你在setCookie方法的name_field的值赋给userName的(),但在下一行你用户名保存在cookie中。 用户名未初始化,因此您将一个空值保存到cookie。这个空值是你从cookie中获得什么样的init()

此外,在的init()声明的userName但cookie的值赋给用户名。这实际上不会引起问题,但它可以解决所有问题。

编辑 - 我刚刚看到@ pimvdb的评论您的回复,并做了一些更多的研究:

当读取cookie,您需要拆分的“;”,而不是“=”。这会给你一个“username = username”,“path = path”和“expires = date”的数组。然后,您将通过查找“=”来从数组的第一个元素中提取用户名,您的代码将在“=”分割,这会得到一组“ /; expires“和”date“。

虽然我已经预料它会在代码中加入一些东西(在解决了套管问题之后)。

(参考页here

+0

请参考[Quirksmode - Cookies](http://www.quirksmode.org/js/cookies.html)而不是w3schools –