如果其他手风琴在jquery中打开,请关闭手风琴

我在一个页面上有多个jquery手风琴,都有不同的id等。我试图只让一个手风琴一次打开。 例如,用户打开一个,然后继续使用不同的手风琴,新的手风琴打开,就像用户刚刚使用的那个一样。

无论如何这样做?

下面是一个手风琴的例子……他们现在看起来都一样。

Location















这些是我目前正在使用的脚本

   $(function() { $( "#accordion,#accordion1,#accordion2,#accordion3,#accordion4,#accordion5" ).accordion(); }); $(function() { var icons = { header: "ui-icon-circle-arrow-e", headerSelected: "ui-icon-circle-arrow-s" }; $( "#accordion,#accordion1,#accordion2,#accordion3,#accordion4,#accordion5" ).accordion({ icons: icons, collapsible: true }); $( "#toggle" ).button().toggle(function () { $( "#accordion,#accordion1,#accordion2,#accordion3,#accordion4,#accordion5" ).accordion( "option", "icons", false ); }, function () { $( "#accordion,#accordion1,#accordion2,#accordion3,#accordion4,#accordion5" ).accordion( "option", "icons", icons ); }); }); $(function() { $("#accordion,#accordion1,#accordion2,#accordion3,#accordion4,#accordion5").accordion({ header: "h3", collapsible: true, active: false }); });  

假设您正在使用jQuery UI手风琴,您可以使用.accordion('activate', false)折叠所有部分。

首先,在你的HTML中,给所有的手风琴容器class="accordion" ,让它们更容易作为一个群体进行寻址。 如果您需要单独处理手风琴,您可以保留id="accordion1"等属性。

然后,在单个 $(function(){...})结构中初始化手风琴(只需一次,而不是3次),如下所示:

 $(function() { var activeAccordian = null; var $accordions = $(".accordion").on('click', function() { activeAccordian = this; }).accordion({ collapsible: true, active: false, icons: false }).on('accordionchange', function(event, ui) { $accordions.not(activeAccordian).accordion('activate', false); }); }); 

DEMO

使用activeAccordian跟踪活动手风琴非常重要,因为它可以抑制新打开的手风琴的相互重新闭合。

编辑:

下面的“aussi la解决方案”,其中.on('accordionchange' ...)被替换为.on('click' ...)让我意识到整个事情将简化为:

 $(function() { var $accordions = $(".accordion").accordion({ collapsible: true, active: false, icons: false }).on('click', function() { $accordions.not(this).accordion('activate', false); }); }); 

跟踪活动手风琴的需要在点击处理程序中消失了.not(this)就足够了。

DEMO