[英]Why isn't my cookie being set?
我正在学习,如果这是一个明显的错误,请保持友好。
/*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');
});
});
谢谢。
如果您正在寻找问题的最佳答案,那么这里可能是一些调试技巧。 您正在使用什么进行调试?
您是否在Firefox中尝试过Firebug。 http://getfirebug.com/这将使您一次单步执行代码,并确切地检查代码在做什么,将什么值真正传递给函数,以及确切地将什么字符串分配给document.cookie。
学习使用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
不是null,但是您显示的消息提示您是。
这与您的问题无关,但是您可以进行一些简化。 首先,jQuery在String上定义了trim
方法,以删除前导和尾随空格。 如果在readCookie
使用此readCookie
请使用它,而不要使用while (c.charAt(0)==' ')
循环。
另一个改进是,通过使用一系列if
块来选择要显示的元素的当前技术无法很好地缩放。 您的作业是使用字符串操作,而不是更好地处理任意数量的元素,然后添加“ .green”,“。yellow”,“。magenta”和“ .cyan”元素。 您可能需要从显示全部更改默认行为。 颜色元素以隐藏它们。 将对象用作关联数组也可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.