почему мои файлы cookie jquery недоступны на нескольких страницах? - PullRequest
5 голосов
/ 03 февраля 2012

На этой неделе я исследовал и собрал несколько jquery (я впервые работаю с jquery) для управления складным меню в пользовательском файле WordPress sidebar.php. Меню генерируется динамически, с помощью wp_query для выбора и сортировки пользовательских типов записей по пользовательским таксономиям и пользовательским порядкам сортировки и т. Д. (Поэтому не существует решения для плагинов).

Я хочу сохранить состояние раскрытия / сворачивания разделов меню, когда посетители сайта перемещаются по контенту. С помощью jquery кажется, что я успешно записываю уникальные имена файлов cookie в браузер, и, похоже, я успешно передаю «расширенные» или «свернутые» значения классов моих тегов.

Однако файлы cookie не работают на нескольких страницах - если вы переходите на другую страницу, новые файлы cookie не устанавливаются, пока вы не щелкнете по пункту меню. Если вы нажмете «Назад» в браузере и вернетесь на предыдущую страницу, ваши куки, установленные на предыдущей странице , будут установлены (что хорошо). Обратите внимание, что при переходе на новую страницу меню ДЕЙСТВИТЕЛЬНО восстанавливается, но содержимое меню редко изменяется (поэтому идентификаторы стабильны), а файлы cookie сохраняются только для текущего сеанса (и все еще должны быть перенесены с предыдущих страниц) .

Я экспериментировал с настройкой PHP-файлов cookie, и они прекрасно держались от страницы к странице. Но мои jquery-файлы cookie зависят от конкретной страницы, поэтому я что-то не так делаю.

Вот код jquery, который появляется на моей странице PHP для управления меню и написания моих файлов cookie (ПРИМЕЧАНИЕ: я am ссылаюсь на плагин jquery.cookie.js):

        <script type="text/javascript">
        $(document).ready(function() {
            setTimeout(function() {
                $('#port-menu > li > a.expanded + ul, #port-menu > li ul li > a.collapsed + ul').slideToggle('medium');
                $('#port-menu > li > a').click(function() {
                    $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium');
                    var vartag = $(this).get(0).tagName.toLowerCase();
                    var varclass = $(this).attr('class');
                    var cookiename = $(this).parent().attr('id');
                    $.cookie(cookiename, $(this).attr('class'));
                });
                $('#port-menu > li ul li > a').click(function() {
                    $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium');
                    var vartag = $(this).get(0).tagName.toLowerCase();
                    var varclass = $(this).attr('class');
                    var vargenre = $(this).parent().parent().parent().attr('id');
                    var varoutlet = $(this).parent().attr('id');
                    var cookiename = vargenre + varoutlet;
                    $.cookie(cookiename, $(this).attr('class'));
                });
            }, 250);
        });
    </script>

Например, динамически создаваемые имена и значения файлов cookie выглядят примерно так:

жанр2: свернуто

жанр3: расширенный

genre1outlet2: расширенный

genre2outlet3: расширенный

genre2outlet4: расширенный

Как уже упоминалось выше, я новичок в jquery. Я также новичок в использовании куки. Любая помощь будет принята с благодарностью.

P.S. После того, как я это заработал, я понятия не имею, как получить информацию из моего массива файлов cookie и применить классы к моему меню - но это отдельная проблема.

1 Ответ

17 голосов
/ 03 февраля 2012

Я думаю, вы должны попытаться указать путь . Это может выглядеть так:

$.cookie(cookiename, $(this).attr('class'), { path: '/' });

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

Это правило (я имею в виду пути) в целом относится к файлам cookie. Не только созданных jQuery.

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