为什么我的cookie没有设置?

时间:2009-12-18 23:18:09

标签: javascript jquery cookies

我正在学习,如果这是一个明显的错误,请善待。

/*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'); 
        });
}); 

感谢-你。

2 个答案:

答案 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 元素以隐藏它们。将对象用作关联数组也可能有所帮助。