jQuery Accordion 的 JavaScript 关闭问题(我相信)

标签 javascript jquery jquery-ui closures

我正在使用 jQuery Accordion,并且在一个页面上有两个 Accordion。我想将每个 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,有时选择的索引在两个 Accordion 之间切换。

我很困惑,我唯一能想到的是这是一个闭包问题,一些变量没有被正确捕获。

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

谢谢, 埃里克

用溶液编辑 11/510

原来的问题是,出于某种原因,我使用的 cookie 库有时会多次设置相同的 cookie,导致出现两个 cookie 值具有完全相同的键的情况。 cookie 权限顺序与读取顺序不同,导致奇怪的行为。

一旦我将 cookie 库切换到 http://code.google.com/p/cookies/我不再有任何问题。感谢所有提供帮助的人!

最佳答案

已更新

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

关于jQuery Accordion 的 JavaScript 关闭问题(我相信),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102139/

相关文章:

javascript - 表中每个控件的唯一 ID

java - 单页反馈页面存储数据

javascript - 如何上传带有某些字段的图像?

jquery - 验证预填充的 jQuery 表单(第一个字段清除时无效,ASP.NET 且不显眼)

javascript - jQuery 切换华氏/摄氏度

jquery - .on() .off() 之后的 jQuery 事件

javascript - 关于在 jquery UI/Draggables 的函数中使用特殊变量的问题

javascript - jQuery 使全局变量

javascript - 可排序克隆元素而不是排序

jquery - 用于 jquery 主题的 Google CDN