jQuery сохраняет Cookies в списке переключателей, которые используют «this» - PullRequest
0 голосов
/ 06 июля 2011

Я использую списки переключателей, которые я собрал из постов на этом сайте. Они отлично работают, но я хотел, чтобы они смогли сохранить значение cookie.

Я выяснил, как заставить cookie работать, когда вы нацеливаетесь на один класс / элемент, такой как "if (myCookie == value) {делать вещи для" .myClass "…}". Проблема, однако, в том, что я использую набор списков, на которые влияет их вызов с помощью "$ (this)". Таким образом, нацеливание на них через значение класса не будет работать, так как они нацелены на все, используя этот класс. Есть смысл? Файл cookie должен влиять на «this», а не на «myClass».

Ниже приведен код, который я собрал для своих списков.

// append links to the element directly preceding the element with a class of "toggle"
$(".toggle").prev(".toggleList").append('<a href="#" class="toggleLink" id="collapse"></a>');

// hide all of the elements with a class of 'toggle'
$('.toggle').show();

$('a.toggleLink').click(function() {

    // change the link depending on whether the element is shown or hidden
    if (!$(this).is('.active')) {
        $(this).addClass('active');
        $(this).attr("id" ,"expand");
                    THIS IS WHERE I NEED THE $.COOKIE TO WORK. I NEED IT TO REMEMBER THAT "THIS" IS "EXPANDED" OR THAT THE FOLLOWING LINE IS "COLLAPSED"
    }
    else {
        $(this).removeClass('active'); 
        $(this).attr("id" ,"collapse");
    }

    // toggle the display
    $(this).parent().next('.toggle').toggle();
    return false;
});

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

// cookies
// sidebar state
var sideBar = $.cookie('sideBar');

// Set the user's selection for the left column
if (sideBar == 'collapsed') {
    $('#btnCollapseSidebar').css("visibility" ,"hidden");
    $('#btnExpandSidebar').css("visibility" ,"visible");
    $('#leftCol').css("visibility" ,"hidden");      
    $('#sidebar').css("visibility" ,"hidden");
    $('#rightCol').css("margin" ,"42px 0 0 45px");
};

Способ, которым я должен использовать их, как указано выше, не может быть нацелен на отдельный класс, но на сам предмет («this»). Когда я пытался применить их, адаптируя приведенный выше код, это влияет на каждый экземпляр моего класса ".toggle". Класс .toggle будет использоваться на странице несколько раз и должен быть доступен бесконечное количество раз.

1 Ответ

1 голос
/ 06 июля 2011

Использование плагина jQuery Cookie очень просто реализовать. http://www.electrictoolbox.com/jquery-cookies/

var CookieOptions = { expires: 7, path: '/' }
$.cookie("CookieName", "CookieValue", CookieOptions);

Получите cookie, выполнив следующее:

$.cookie("CookieName");
...