JavaScript闭包问题(我相信)与jQuery Accordion

时间:2010-11-04 22:50:19

标签: javascript jquery jquery-ui closures

我正在使用jQuery Accordion,并且在一个页面上有两个Accordions。我想将每个Accordion的选定索引存储在cookie中。为此,我有以下代码(引用了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,有时候选择的索引在两个Accordions之间切换。

我很难过,我唯一能想到的是它是一个封闭问题,有些变量没有被正确捕获。

这是一个关闭问题,还是我有其他一些导致问题的错误?

谢谢, 埃里克

使用解决方案编辑11/510

问题原因在于,由于某些原因,我使用的cookie库有时会多次设置相同的cookie,从而导致两个cookie值完全相同的情况。 cookie正确的顺序与读取顺序不同,导致奇怪的行为。

将Cookie库更改为http://code.google.com/p/cookies/后,我不再有任何问题。感谢所有帮助过的人!

1 个答案:

答案 0 :(得分:1)

  

<强>已更新

$(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
                });
            }
        });
    });
});