javascript - 为什么我的 cookie 没有被设置?

标签 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'); 
        });
}); 

谢谢。

最佳答案

学习使用Firebug是最好的建议。另一个有用的工具是着色编辑器。即使如此,也提供了一些此类帮助。注意这一行:

    else if (language!=red)

“red”没有被着色为字符串,因此它通过不突出而脱颖而出。原始代码中是否定义了名为“red”的变量?如果不是,则会将语言与未定义进行比较。

此外,请考虑此语句后面的几行:

    else if (language!='red') {
        $('.blue').hide();
        alert('The cookie is red'); 

您刚刚测试了 cookie 值不是红色的,但您警告说它是红色的。您在第一次测试中犯了类似的错误:

    if (language!=null) {
        $('.blue').hide();
        alert('No cookie set'); 

language 不为空,但您显示的消息表明它是空的。

这与您的问题无关,但您可以进行一些简化。首先,jQuery 定义了 trim String 上的方法删除前导和尾随空格。请在 readCookie 中使用 if ,而不是在 while (c.charAt(0)==' ') 循环中。

另一个改进是,当前通过使用 if block 序列来选择要显示的元素的技术不能很好地扩展。您的作业是使用字符串操作等来更好地处理任意数量的元素,然后添加“.green”、“.yellow”、“.magenta”和“.cyan”元素。您可能需要将默认行为从显示所有 .color 元素更改为隐藏它们。使用对象作为关联数组也可能会有所帮助。

关于javascript - 为什么我的 cookie 没有被设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931230/

相关文章:

javascript - 与YouTube播放器类似的视频播放器建议

javascript - AngularJS 基本路由程序不工作

javascript - 获取几何面上点的颜色

javascript - 在 div 中滚动时如何在 jQuery 中使用 scrollTop?

function - jQuery 函数重复

javascript - 用于模拟按键的 Jquery 脚本按下不运行键盘快捷键

javascript - 高度设置为自动时 div 的定位

javascript - 存储购物车详细信息的最佳方式本地存储或服务器端 cookie

javascript - 使用 cookie 持久化 div 切换状态

php - PHP 中跨多个选项卡的 session 或 cookie