我有这个分配来读取,写入,启用cookie,以便用户名将存储在变量中,然后写入cookie。我的问题是,似乎代码的最后一部分正在运行。但是,假设用户名被存储到变量中的第一部分不起作用,我可以看到当我运行代码并且前两个警告框没有显示时。假设以“你好,我是你的宠物摇滚”打开并且在我最后一次点击iRock之后,图像被假定为改变为快乐的iRock。但它不会发生。我想因为cookie没有被读取。有什么建议。这是链接:http://ciswebs.smc.edu/cis54/tyson_schweidel /iRockChapter3.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>iRock - The Virtual Pet Rock</title>
<link href="donut_stylesheet/donut.css" rel="stylesheet" type="text/css" />
<script type ="text/javascript" >
var userName;
function resizeRock(){
document.getElementById("rockImg").style.height = (document.body.clientHeight - 100) * 0.9;
}
function greetUser(){
userName = readCookie("rock_username");
if(userName)
alert("Hello " + userName + ", I missed you.");
else
alert("Hello, I am your pet rock");
}
function touchRock(){
if(userName)
alert("I like attention," + userName + ". Thank you.");
}
userName = prompt("What is your name?", "Enter name here.");
if(userName)
alert("It is good to meet you, " + userName + ".");
writeCookie(irock_username", userName, 1 * 365);
document.getElementById("rockImg").src = "rock_happy.png";
setTimeout("document.getElementById(('rockImg').src = 'images/rock.png';", 5 * 60 * 1000);
</script>
</head>
<body onload="resizeRock(); greetUser(); onResize="resizeRock();">
<img id="rockImg" src="images/rock.png" alt="iRock" style="cursor:pointer" onClick="touchRock();" />
</body>
</html>
答案 0 :(得分:4)
让我们打破这一点。
如何启用Cookie
默认情况下,几乎每个浏览器都会启用Cookie至少2000年。虽然您不能依赖启用了Cookie的人 - 但我认为这是家庭作业的安全假设。现在,对于要启用而不是的Cookie,用户必须明确关闭它们。
读取,写入,启用cookie,以便用户名将存储在变量中,然后写入cookie
您有两个未声明的功能。正在调用readCookie
和writeCookie
,但您尚未在任何地方声明它们。你需要看起来像这样的东西:
function readCookie() {
//Return the value of the cookie
}
function writeCookie(value) {
//Write the value to the cookie
}
您可以详细了解Cookie的确切内容:
http://www.quirksmode.org/js/cookies.html
以及如何阅读和写作。
此外,您的HTML和JavaScript中存在一些语法错误。请务必仔细查看。需要注意的事项:
{}
)都有匹配的开/关。onload
属性似乎缺少引号。其他提示:
不要尝试一次构建所有内容。从一个简单的任务开始,让它自己工作。例如,从设置/读取cookie开始,而不是担心摇滚。一旦您获得一个特定的工作方式,您可以按照您希望的方式工作,就可以在其上添加更多功能。
答案 1 :(得分:0)
你在setTimeout中有一行代码:
setTimeout("document.getElementById(('rockImg').src = 'images/rock.png';", 5 * 60 * 1000);
它的语法错误。
setTimeout("document.getElementById('rockImg').src = 'images/rock.png';", 5 * 60 * 1000);
什么会更好:
setTimeout(function()
{
var rockImg = document.getElementById('rockImg');
if(rockImg != null)
{
rockImg.src = 'images/rock.png';
}
}, 5 * 60 * 1000);
function(){ ... }
创建一个匿名函数
它保留为代码而不是文本(这意味着任何语法高亮显示它都会起作用。)并且易于阅读。