Jquery手风琴关闭然后打开

时间:2008-12-19 21:45:12

标签: jquery jquery-plugins accordion

我使用jquery accordion插件在页面上设置了许多手风琴,因此我可以实现展开全部并折叠所有功能。

每个ID元素都是它自己的手风琴,下面的代码可以关闭它们,无论哪个已经打开:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", -1)
;

我的问题在于展开全部。当我将它们全部展开时使用以下代码:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", 0)
;

有些人会收缩,有些人会根据他们以前是否开放而扩大。

我想要纠正这个问题就是将它们全部折叠起来,然后在点击展开全部时将它们全部展开。但是这段代码无法正常执行:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", -1)
;
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", 0)
; 

它只会击中第二个命令而不是先关闭它们。有什么建议吗?

3 个答案:

答案 0 :(得分:32)

我不确定你追求的是什么,但这是我最好的猜测。在你所有的手风琴中,你想要“全部打开”按钮打开所有关闭的手风琴(也就是说,没有任何部分显示)。我会使用filter()

来做到这一点
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .filter(":not(:has(.selected))")
    .accordion("activate", 0)
;

那是你所追求的吗?


编辑以解释该过滤器功能:

过滤器功能只是通过过滤器运行您当前的选择,删除任何不匹配的内容。它有两种不同的形式:一种是你传递常规jQuery查询,就像我上面那样,另一种你可以定义一个要过滤的函数。如果函数返回false,则删除该元素。

在这种情况下,查询会删除任何不具有(:not)(:has)具有“已选择”类(.selected)的子项的内容。我在这里使用了.selected选择器,因为这是手风琴添加到当前打开的面板的。

如果您只有一架手风琴,或者您为每个手风琴分配了某种类型的标识符,例如类名,那么您可以大大减少整个脚本。让我们说对于你想要变成手风琴的每个元素,你给它类“一致”。

$(".accord:not(:has(.selected))").accordion("activate", 0);

这样更易读和可维护,因为如果您愿意,将来可以轻松添加更多手风琴,并且可以处理它。

过滤器的文档位于:http://docs.jquery.com/Traversing/filter

答案 1 :(得分:2)

jQuery('#accordion').accordion({        
    active:-1,
});

答案 2 :(得分:0)

我遇到了同样的问题并使用一些简短的代码解决了这个问题,利用JQuery的each()函数在将焦点设置为item [0]时折叠,以便恢复正常的导航。

http://spstring.jeffthink.com/?p=49