繁体   English   中英

为什么没有设置我的cookie?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM