我正在学习,如果这是一个明显的错误,请善待。
/*set cookie*/
function setCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
setCookie(name,"",-1);
}
$(window).load(function() {
//check for the cookie
var language = readCookie('language');
//if null show red
if (language!=null)
{
$('.blue').hide();
alert('No cookie set');
}
//if null show red
else if (language!=red)
{
$('.blue').hide();
alert('The cookie is red');
}
//if blue show blue
else {
$('.red').hide();
alert('The cookie is set to blue');
}
$('#blue').click(function() {
$('.red').hide();
$('.blue').show();
setCookie('language','blue', 30);
alert('The cookie is set to blue');
});
$('#red').click(function() {
$('.red').show();
$('.blue').hide();
setCookie('language','red', 30);
alert('The cookie is set to red');
});
});
感谢-你。
答案 0 :(得分:2)
如果您正在学习问题的最佳答案,那么可能会有一些调试技巧。你在调试什么用?
你在Firefox中尝试过Firebug吗? http://getfirebug.com/这将允许您一次一行地执行代码,并准确检查它正在做什么,实际传递给函数的值是什么,以及确切地指定给document.cookie的字符串。
答案 1 :(得分:2)
学习使用Firebug是最好的建议。另一个有用的工具是着色编辑器。甚至SO也提供了这种帮助。注意这一行:
else if (language!=red)
“红色”并没有被染成一根绳子,因此它没有突出而脱颖而出。是否在原始代码中的某处定义了名为“red”的变量?如果没有,则将语言与undefined
进行比较。
另外,请考虑以下语句后面的行:
else if (language!='red') {
$('.blue').hide();
alert('The cookie is red');
您刚刚测试过该Cookie值不是红色,但您提醒它确实存在。你在第一次测试中犯了类似的错误:
if (language!=null) {
$('.blue').hide();
alert('No cookie set');
language
不为空,但您显示的消息表明它是。
这与您的问题无关,但您可以进行一些简化。首先,jQuery在String上定义了一个trim
方法来删除前导和尾随空格。如果在readCookie
而不是while (c.charAt(0)==' ')
循环中使用它,请使用它。
另一个改进是当前使用if
块序列选择要显示的元素的技术不能很好地扩展。你的作业是使用字符串操作以及更好地处理任意数量的元素,然后添加“.green”,“。yellow”,“。image”和“.cyan”元素。您可能需要更改默认行为,以显示所有。 color 元素以隐藏它们。将对象用作关联数组也可能有所帮助。