Переключить состояние Cookie успешно установлен, но как быть с поведением, когда cookie не существует? - PullRequest
0 голосов
/ 03 февраля 2019

Я успешно закодировал следующее поведение:

  • Три деления скрыты / показаны с помощью .toggle ();
  • Когда пользователь использует .toggle ();он также устанавливает cookie, запоминая состояние переключения

Вот jQuery приведенного выше кода, который работает с комментариями:

    <script>
    $(document).ready(function () {

    // If user clicks the toggle it hides/shows the divs

    $(" .togglediv ").click(function () {
        var closed = $(" .siemaholder, .c_l_off, .c_r_off ").is(":hidden");
        if (closed)
            $(" .siemaholder, .c_l_off, .c_r_off ").show();
        else
            $(" .siemaholder, .c_l_off, .c_r_off ").hide();

    // If user uses the toggle it sets a cookie to remember the toggle state

        setCookie("open", closed, 365);
    });

    var openToggle = getCookie("open");

    if (openToggle=="true") {        
        $(" .siemaholder, .c_l_off, .c_r_off ").show();
    }
    else {        
        $(" .siemaholder, .c_l_off, .c_r_off ").hide();
    }

});

function setCookie(c_name, value, exdays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString());
    document.cookie = c_name + "=" + c_value;
}

function getCookie(c_name) {
    var i, x, y, ARRcookies = document.cookie.split(";");
    for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
        if (x == c_name) {
            return unescape(y);
        }
    }
}
</script>

Проблема у меня заключается в том, что когда нетcookie еще существует (когда пользователь заходит на страницу в первый раз и еще не сгенерировал куки), div по умолчанию скрыт .Я не хочу этого - я хочу, чтобы они по умолчанию показывали .

Я намерен показать их по умолчанию, пока не будет установлен cookie с помощью .toggle ();что я упоминал ранее.Так что, когда пользователь впервые заходит на страницу, контент отображается и затем может быть «скрыт» пользователем вручную (что запоминается с этого момента).

Может ли кто-нибудь мне помочь?

До сих пор я пытался использовать $(" .siemaholder, .c_l_off, .c_r_off ").show(); в начале скрипта, так что по умолчанию div будут отображаться, пока не будут задействованы куки.Это не сработало.

1 Ответ

0 голосов
/ 03 февраля 2019

1)

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

2)

на стороне клиентаФайлы cookie подходят для пользовательских настроек по умолчанию (например, в вашем случае) , если , они не используются для авторизации пользователя.

В вашем случае вы должны установить jquery в cookie$(document).ready( примерно так:

$(document).ready(function () {
if (!$.cookie('open') || !$.cookie('closed')) {
    $.cookie('open', 1, {expires: 10});
}
$(" .togglediv ").click(function () {
    var closed = $(" .siemaholder, .c_l_off, .c_r_off ").is(":hidden");
    if (closed)
        $(" .siemaholder, .c_l_off, .c_r_off ").show();
        $.removeCookie('closed');
        $.cookie('open', 1, {expires: 10});
    else
        $(" .siemaholder, .c_l_off, .c_r_off ").hide();
        $.removeCookie('open');
        $.cookie('closed', 1, {expires: 10});

Подробнее об этих темах можно узнать, просмотрев куки на стороне сервера и на стороне клиента и куки jquery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...