jQuery cookie, чтобы запомнить, какой список навигации открыт? - PullRequest
0 голосов
/ 10 января 2012

Я соединил нижеследующее в моем (очень) скромном хакерском способе jQuery:

$(".toggle_container").hide();
                $(".trigger a").addClass("close");
                $(".trigger a").click(function() {
                $(".toggle_container").slideUp('200','swing');
                 $(".trigger a").removeClass("open").addClass("close");
                    if     ($(this).next(".toggle_container").is(":hidden")) {
                            $(this).next(".toggle_container").stop(true,false).slideToggle('200','swing');

                        }
                });

jsfiddle здесь: http://jsfiddle.net/FWzWu/8/

Я никогда не использовал плагин jquery cookie, но хотел бы использовать его сейчас, чтобы запоминать состояние меню пользователя от страницы к странице. Используя плагин github здесь: https://github.com/carhartl/jquery-cookie

Любая помощь наиболее ценится! Спасибо!

Ответы [ 2 ]

1 голос
/ 10 января 2012

Первый удар (я добавил вызов event.preventDefault(), чтобы остановить действие привязки по умолчанию при нажатии - возможно, вам придется удалить это).

Это может быть связано с некоторой очисткой, например, было бы неплохо воспользоваться делегированием события для захвата события щелчка на элементах привязки, надеюсь, оно даст представление о том, как использовать плагин и где его использовать.

 $(function () {   

    // give each container a unique class
    var containers = $("ul.toggle_container").hide().each(function (i,v) {
        $(this).addClass('container_' + i);       
    });

    var value = $.cookie('toggled_container');     

    // if we have a value in the cookie, use it to show that container
    if (value) {
        $('ul.' + value).show();
    }

    var anchors = $("li.trigger a");

    anchors.addClass("close").click(function() {
        containers.slideUp('200','swing');
        anchors.removeClass("open").addClass("close");
        var nextContainer = $(this).next("ul.toggle_container");
        if (nextContainer.is(":hidden")) {
            // capture the unique class that we have given the container
            $.cookie('toggled_container', nextContainer.attr('class').match(/container_\d+/));
            nextContainer.stop(true,false).slideToggle('200','swing');
        }
    });
});

Очевидно, что это решение предполагает, что ваши контейнеры никогда не будут меняться в количестве и порядке;если они это сделают, неправильный контейнер будет расширяться при загрузке страницы:)

0 голосов
/ 10 января 2012

На странице, которую вы перечисляете (на github), есть readme , я никогда не использовал плагин, но он выглядит достаточно просто.

Убедитесь, что вы включили скрипт;

<script src="/path/to/jquery.cookie.js"></script>

Теперь каждый раз, когда вы хотите изменить значение куки (или создать его в первую очередь), используйте;

$.cookie('cookie_name', 'cookie_value', { expires: 7 });

измените * cookie_name * и * cookie_value * на все, что вы пожелаете. Например

$.cookie('nav_choice', '1', { expires: 7 });

Тогда каждый раз, когда вы загружаете страницу, запускайте это внутри документа .ready;

var nav = $.cookie('nav_choice');

Затем вы можете выполнить операторы if (), чтобы определить, что отображать.

Это помогает? Я могу уточнить, если необходимо.

...