jQuery cookie切换

jQuery cookie切换,jquery,cookies,toggle,addclass,Jquery,Cookies,Toggle,Addclass,我试图在我的body标签上切换一个类,同时使用cookie来记住用户设置 使用jquery cookie插件,这就是我想到的 $("a#switchit").click(function () { if($.cookie('viewState')) { $('body').addClass('light') $.cookie('viewState', 'true', { expires: 9999 }); } else { $('

我试图在我的body标签上切换一个类,同时使用cookie来记住用户设置

使用jquery cookie插件,这就是我想到的

$("a#switchit").click(function () {
    if($.cookie('viewState')) {
        $('body').addClass('light') 
        $.cookie('viewState', 'true', { expires: 9999 });
    } else {
        $('body').removeClass('light')
        $.cookie('viewState', null); 
    };
});
我不是jquery方面的专家,所以语法和一切都可能是错误的,但希望您能看到我试图实现的目标,并纠正我的错误

我的html:

<a id="switchit">Switch it</a>
切换它

我认为这会奏效

$("a#switchit").click(function () {
    var isNotSet = $.cookie('viewState') === null;
    $('body').toggleClass( 'light', isNotSet);
    if (isNotSet) {
      $.cookie('viewState', 'true', { expires: 9999 });
    } else {
      $.cookie('viewState', null); 
    }
});

逻辑问题,请看第2行:

$("a#switchit").click(function () {
    if(!$.cookie('viewState')) {
        $('body').addClass('light') 
        $.cookie('viewState', 'true', { expires: 9999 });
    } else {
        $('body').removeClass('light')
        $.cookie('viewState', null); 
    };
});

看看,当viewState为true时,您是否设置viewState=true。当viewState为NULL时,您需要设置viewState=true。

根据您对我对该问题的评论的回答,您的问题是您需要检查cookie是否存在,并在页面加载以及单击按钮时设置类

在此基础上进行扩展:cookie将在页面刷新时保持不变(等待您为适当的时间范围设置过期),而您对DOM所做的任何操作(即向主体添加类名)都不会保持不变

您已经为用户正确设置了颜色方案,您的cookie设置得很好。你只是遗漏了你事先检查他们是否在上次访问时设置的部分

因此,在jQuery就绪函数中,添加:

$(document).ready(function(){
    if($.cookie('viewState') == 'true'){
        $('body').addClass('light');
    }
});

我觉得这件衣服很合适。发生了什么不该发生的事?问题是什么?什么不起作用?您是否将
.cookie()
函数与其他地方的插件一起包含在一起?@idrumgood基本上,类切换“light”可以在body标记上工作,但当我刷新页面时,类会被删除…@Sparky672问题是代码中是否有错误,以及我是否做得对。。。不,cookie插件没有在其他地方使用,这不是我的意思。我只是问你是否包括插件。您发布代码时没有解释您使用的插件启用了
.cookie()
。许多读者可能不知道这一点。有时人们会问这样的问题:当他们试图使用插件函数而没有正确地包含实际的插件时,为什么他们的代码不起作用。