Javascript 如果jquery中不存在该名称的cookie,则添加cookie

Javascript 如果jquery中不存在该名称的cookie,则添加cookie,javascript,jquery,cookies,Javascript,Jquery,Cookies,我有一个启动页面,用户可以在其中选择两种体验。一旦选择,就会添加一个cookie,这样他们就可以一直获得这种体验(或者至少在接下来的30天内)。但是,如果用户直接到站点访问子url并绕过初始页面,则应自动将其添加到默认体验并获得默认cooke(theme1)。除了默认的cookie部分外,其他一切都正常工作 以下是我所拥有的: function createCookie(name,value,days) { if (days) { var date = new Date(

我有一个启动页面,用户可以在其中选择两种体验。一旦选择,就会添加一个cookie,这样他们就可以一直获得这种体验(或者至少在接下来的30天内)。但是,如果用户直接到站点访问子url并绕过初始页面,则应自动将其添加到默认体验并获得默认cooke(theme1)。除了默认的cookie部分外,其他一切都正常工作

以下是我所拥有的:

function createCookie(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;
}
$('.theme2').click(function() {     
    createCookie('chooseTheme','chosenTheme2',30)       
});
$('.theme1').click(function() {     
    createCookie('chooseTheme','chosenTheme1',30)       
}); 
var x = readCookie('chooseTheme');
if ($.cookie('chooseTheme') === null) {
    createCookie('chooseTheme','chosenTheme1',30);      
} 
if (x.indexOf('chosenTheme1') > -1) {
    $('body').addClass('themeOne');
} else if (x.indexOf('chosenTheme2') > -1) {
    $('body').addClass('themeTwo');
} 
函数createCookie(名称、值、天数){
如果(天){
变量日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
var expires=“;expires=“+date.togmString();
}
else var expires=“”;
document.cookie=name+“=”+value+expires+“path=/”;
}
函数readCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i-1){
$('body').addClass('themeOne');
}else if(x.indexOf('chosenTheme2')>-1){
$('body').addClass('themeTwo');
} 

谢谢

尝试运行每1分钟更新一次的循环。在更新过程中,它会触发检查cookie的函数,如下所示:

setInterval(checkCookie(), 60000);
//the 60000 is for 60000 milliseconds which is 1 minute.
function checkCookie() {
    var x = readCookie('chooseTheme');
    if ($.cookie('chooseTheme') === null) {
    createCookie('chooseTheme','chosenTheme1',30);      
    } 
    if (x.indexOf('chosenTheme1') > -1) {
        $('body').addClass('themeOne');
    } else if (x.indexOf('chosenTheme2') > -1) {
    $('body').addClass('themeTwo');
    }
}

然后将上面的代码添加到代码中,它会每1分钟检查一次主题。我希望这能对您有所帮助。

有没有办法避免循环并在加载时执行此操作?因为它应该只在页面加载时起作用。你可以设置一个变量,如果主题已经从cookie中读取,它会变为“true”,默认情况下它是false。在用户启动后1分钟,如果变量仍然为false,则重新运行脚本,以便检查该变量的循环不是100%常量。尽管如此,我还是认为运行循环没有什么错。除非你有什么特别的东西会受到影响。真/假变量有效。虽然我没有使用间隔(因为如果你在页面结束时,由于任何原因没有cookie,我的代码抛出了一个错误,这是一些浏览器不喜欢的。谢谢!