嵌套的jQuery UI Accordions未能通过.active

时间:2016-04-20 14:04:41

标签: jquery-ui accordion

我在我的标记中嵌套了jQuery手风琴,我尝试根据上次会话中最后打开的路径在页面加载时自动打开。 我将路径保存到cookie中,加载cookie并运行以下代码

path.forEach(function(label){
    var element = root.find("[data-caption='"+label+"']");
    element.parent().accordion( "option", "active", parseInt(element.attr('data-index')) );
    root = element.children().eq(1);
});

问题在于,出于某种原因,“活跃的”#39;仅对第一个手风琴而非嵌套手风琴有效。

我多次检查过:

  1. element.parent()确实是一个手风琴(否则会引发错误)。
  2. data-caption是每次迭代中元素的唯一键。
  3. element.children()。eq(1)是活动面板(根据jQuery UI Accordion的结构)。
  4. 我要求打开的活动元素确实存在于每次迭代中。
  5. 我不知道这里有什么问题,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我自己发现了这个问题并在此发布以供将来参考。

问题是代码的这一部分

parseInt(element.attr('data-index'))

原因在于手风琴如何计算其面板中的元素。 在我的面板中,我有几个html元素,这些元素不是手风琴,而是几个。现在上面的代码给我带来了与整个面板相比较的accordion元素的索引。 问题是由于某种原因.active仅计算手风琴本身的子元素。因此,例如,如果一个元素的面板索引是3,但它在面板中有1个非手风琴元素,那么它的活动" index实际上是2。 我不知道为什么他们选择了这种行为,但是你有它。

我的解决方案是在元素上放置一个不同的属性" s" active"索引并使用它而不是数据索引。

现在一切都像魅力一样。