Как сохранить cookie на всех страницах ?

Тема в разделе "JavaScript", создана пользователем xsacha, 12 дек 2017.

Модераторы: ZiX
  1. xsacha

    xsacha Постоялец

    Регистр.:
    16 июн 2015
    Сообщения:
    77
    Симпатии:
    16
    Подскажите как сохранить cookie на всех страницах форума ?
    PHP:
    <label>
                <
    input type="checkbox" id="chk1"/> воспроизведение
            
    </label>

    <
    script>
        function 
    cookieFromCheckbox()
        {
            var 
    ch = [];
            $(
    "#chk1").each(function(){
                var 
    $el = $(this);
                if(
    $el.prop("checked"))
                    
    ch.push($el.attr("id"));
            });
            $.
    cookie("webzones"ch.join());
        }
        function 
    checkboxFromCookie()
        {
            if($.
    cookie("webzones") == null)
                return;
            var 
    chMap = $.cookie("webzones").split(',');
            for (var 
    i in chMap)
                $(
    '#'+chMap[i]).prop("checked"true);
        }
        function 
    clearCookie()
        {
            $.
    cookie("webzones"null);
        }
        var 
    checkboxCookie = $.cookie("webzones");
        if(
    checkboxCookie == null)
        {
            
    cookieFromCheckbox();
            
    checkboxCookie = $.cookie("webzones");
        }
        else
            
    checkboxFromCookie();
        $(
    "#chk1").change(function(){
            
    cookieFromCheckbox();
        });
    </script>
    Цель такая, если человек нажал чекбокс, то значение true должно сохраниться и отображаться на всех страницах, если чекбокс не нажат, тогда значение false. В данном варианте сохраняется состояние только для той странице где было нажатие, но действие выполненное после нажатие работает на всех страницах, но отключить его нельзя.
     
  2. world-tour

    world-tour

    Регистр.:
    25 апр 2015
    Сообщения:
    216
    Симпатии:
    181
    Вот ответ на твой вопрос, я даже бы сказал решение:
    https://ru.stackoverflow.com/questions/469059/Сохранение-положения-списка-ul-при-перезагрузке-js

    http://jquery.page2page.ru/index.php5/Работа_с_cookie
     
    xsacha нравится это.
  3. xsacha

    xsacha Постоялец

    Регистр.:
    16 июн 2015
    Сообщения:
    77
    Симпатии:
    16
    Да верно если посмотреть код его я и использовал, он хорошо работает на одной странице, но если передвигаться по сайту, то чекбокс где включен, где то этого состояния нет вообще, поэтому и я хотел узнать как сохранть куки глобально, чтобы везде состояние отображалось, а не только на той странице где установлен чекбокс.
     
  4. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    469
    Симпатии:
    62
    А куки и так привязаны к домену, а не к странице...
     
  5. xsacha

    xsacha Постоялец

    Регистр.:
    16 июн 2015
    Сообщения:
    77
    Симпатии:
    16
    Но тем не менее в на одних страницах работают на других нет. Чекбокс пустой.
     
  6. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    469
    Симпатии:
    62
    Ну значит надо отлавливать ситуацию при которой это происходит. Однозначно где-то проблема в логике
     
  7. tobi mobi

    tobi mobi Создатель

    Регистр.:
    24 ноя 2017
    Сообщения:
    17
    Симпатии:
    35
    PHP:
    $(document).ready(function() {
        var 
    treeState = { // объект, который хранит состояния веток
            
    stateJSON.parse(localStorage.getItem('branchOpened')) || {},
            
    setOpened: function(element) {
                
    this.state[this._getKey(element)] = true;
                
    this._save();
            },
            
    setClosed: function(element) {
                
    delete this.state[this._getKey(element)];
                
    this._save();
            },
            
    isClosed: function(element) {
                return !
    this.state[this._getKey(element)];
            },
            
    _save: function() {
                
    localStorage.setItem('branchOpened'JSON.stringify(this.state));
            },
            
    _getKey: function(element) {
                var 
    ixs = [];
                $(
    element).parentsUntil('ul-dropfree''li')
                    .
    each(function(ixitem) {
                        
    ixs.unshift($(item).index());
                    });
                return 
    ixs.join(',');
            }
        };
        $(
    ".ul-dropfree").find("li:has(ul:has(li))").prepend('<div class="drop"></div>');
        $(
    ".ul-dropfree div.drop").click(function() {
            if ($(
    this).nextAll("ul").css('display') == 'none') {
                $(
    this).nextAll("ul").slideDown(400);
                $(
    this).css({
                    
    'background-position'"-22px 0px"
                
    });
                
    // сохраняем состояние ветви
                
    treeState.setOpened(this);
            }
            else {
                $(
    this).nextAll("ul").slideUp(400);
                $(
    this).css({
                    
    'background-position'"0px 0px"
                
    });
                
    // сохраняем состояние ветви
                
    treeState.setClosed(this);
            }
        });
        
    // эту часть немного переделал, чтобы скрывать только нужные ветви
        
    $(".ul-dropfree").find("ul").each(function(ixbranch) {
            $(
    branch).parent("li")
                .
    children("div.drop")
                .
    css({'background-position'"0 0"});
            if (
    treeState.isClosed(branch)) {
                $(
    branch).slideUp(400);
            }
        });
    });
     
    Yolo Yolo и xsacha нравится это.