Проблема закрытия JavaScript (я полагаю) с JQuery Accordion - PullRequest
2 голосов
/ 05 ноября 2010

Я использую Аккордеон jQuery, и у меня есть два Аккордеона на одной странице.Я хочу сохранить выбранный индекс каждого Аккордеона в куки.Для этого у меня есть следующий код (со ссылкой на библиотеку jquery.cookie.js).

function accordionsInitAll() {
    $(document).ready(function () {
        accordionInit("#accordion1");
        accordionInit("#accordion2");
    });
}

function accordionInit(sAccordion) {
    var accordion = $(sAccordion);
    var index = $.cookie(sAccordion);
    var active;
    if (index !== null) {
        active = accordion.find("h3:eq(" + index + ")");
    } else {
        active = 0;
    }
    $(sAccordion).accordion(
    {
        active: active,
        change: function (event, ui) {
            var index = $(this).find("h3").index(ui.newHeader[0]);
            $.cookie(sAccordion, index);
        }
    });
}

Каждый раздел Accordion содержит ссылки, которые ссылаются на ту же страницу, на которой включен jQuery (с различными параметрами),Функции работают в том, что какое-то состояние сохраняется.Проблема в том, что поведение кажется случайным.Иногда это работает отлично, иногда cookie активного элемента имеет значение null, когда оно должно иметь значение, а иногда выбранный индекс переключается между двумя Аккордеонами.

Я в замешательстве, и единственное, о чем я могу думать, это то, что это проблема с закрытием, когда какая-то переменная записывается неправильно.

Это проблема с закрытием или у меня естькакая-то другая ошибка, которая вызывает проблему?

Спасибо, Эрик

Редактировать 11/510 с решением

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

Как только я переключил библиотеку cookie на http://code.google.com/p/cookies/, у меня больше не было проблем.Спасибо всем, кто помог!

1 Ответ

1 голос
/ 05 ноября 2010

ОБНОВЛЕНО

$(function() {
    var accordions = ['dataAccordion', 'regionAccordion'];
    var index,cookie;
    $.each(accordions,function(i, item) {
        cookie = $.cookie(item);
        index = (null !== cookie) ? parseInt(cookie) : 0;
        $acdn = $('#' + item);
        $acdn.accordion({
            autoHeight: false,
            fillSpace: false,
            clearStyle: true,
            active: index,
            change: function(event, ui) {
                index = $(this).find("h3").index(ui.newHeader[0]);
                $.cookie(this.id, index, {
                    expires: 10
                });
            }
        });
    });
});
  • ПРИМЕЧАНИЕ: использование parseInt()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...