【问题标题】:Nested jQuery UI Accordions won't open with .active嵌套的 jQuery UI 手风琴不会使用 .active 打开
【发布时间】:2016-04-24 16:29:05
【问题描述】:

我在我的标记中嵌套了 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);
});

问题是由于某种原因,“活动”仅对第一个手风琴生效,而不是嵌套的手风琴。

我检查了几次:

  1. element.parent() 确实是一个手风琴(否则它会抛出一个错误)。
  2. data-caption 是每次迭代中元素的唯一键。
  3. element.children().eq(1) 是活动面板(根据 jQuery UI Accordion 的结构)。
  4. 我要求打开的活动元素确实存在于每次迭代中。

我不知道这里有什么问题,有什么想法吗?

【问题讨论】:

  • 第 3 点似乎不太可能,尤其是考虑到您将它与 .find 一起使用。你能提供你的手风琴的 HTML 吗?或者构造一个minimal reproducible example

标签: jquery-ui accordion


【解决方案1】:

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

问题是这部分代码

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

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

我的解决方案是在元素上放置一个具有“活动”索引的不同属性,并使用它来代替数据索引。

现在一切都像魅力一样运作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多