2015-12-10 2 views
0

У меня есть страница всплеска, где пользователь выбирает между двумя событиями. после его выбора добавляется куки-файл, поэтому они всегда получат этот опыт (или, по крайней мере, в течение следующих 30 дней). однако, если пользователь приходит на сайт напрямую к подзаголовку и обходит всплывающую страницу, они должны автоматически добавляться к опыту по умолчанию и получать cookie по умолчанию (theme1). все, кроме части cookie по умолчанию, работает.добавить файл cookie, если cookie этого имени не существует jQuery

вот что у меня есть:

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

спасибо!

ответ

0

Попробуйте запустить цикл, который обновляется каждые 1 минуту. Во время обновления, он запускает функцию, которая проверяет куки, как в следующем:

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 минуту. Я надеюсь, это поможет вам.

+0

Есть ли способ избежать цикла и просто сделать это при загрузке? потому что это должно иметь значение только при загрузке страницы. –

+0

Ну, вы можете установить переменную, и если тема была прочитана из файла cookie, она изменится на «true», и по умолчанию она неверна. Через 1 минуту после того, как пользователь включится, если переменная все еще ложна, запустите сценарий, поэтому цикл проверки этой переменной не будет на 100% постоянным. Но опять же, я не вижу ничего плохого в запуске цикла. Если у вас есть что-то конкретное, что будет затронуто. – OneStig

+0

Работает истинная/ложная переменная. хотя я не использовал этот интервал (поскольку, если вы попадаете на страницу и нет cookie по какой-либо причине, мой код породил ошибку, которую не понравилось нескольким браузерам. Спасибо! –

Смежные вопросы