除了第一个,Twitter Bootstrap崩溃了

时间:2015-07-28 17:55:29

标签: javascript jquery twitter-bootstrap accordion collapse

我想以编程方式折叠除Bootstrap 3可折叠手风琴中的第一项以外的所有项目。但是,我遇到了一些奇怪的行为。请查看这个小提琴,让我知道什么是错的。

http://jsfiddle.net/k9o2j53a/

$('button').click(function(){
    var panels = $('#accordion').find('.panel-collapse');
    panels.collapse('hide');
    panels.first().collapse('show');
});

第一次单击该按钮时,其行为与第二次单击该按钮时的行为不同。后续点击似乎在所需行为和每个项目的折叠之间交替。

3 个答案:

答案 0 :(得分:1)

试试这个:

$('#a').click(function(){
   var panels = $('#accordion').find('.panel-collapse').not("#collapseOne");
   panels.collapse('hide');
   panels.collapse('show');
});

更新了fiddle

如果我理解你的问题。你想“崩溃除了第一个”。非常直截了当地使用.not("selector")来排除它。

答案 1 :(得分:0)

我找到了我正在寻找的解决方案。事实证明,必须首先初始化可折叠元素,否则第一次调用show / hide将执行初始化,并导致此“切换”。我一直在观察和试图避免的行为。

因此,要显示/隐藏面板,最好写一下:

$('#accordion').find('.panel-collapse').collapse({toggle: false}).collapse('show');

然后隐藏除第一个之外的所有内容:

$('#accordion').find('.panel-collapse:gt(0)').collapse({toggle: false}).collapse('hide');
$('#accordion').find('.panel-collapse:first').collapse({toggle: false}).collapse('show');

答案 2 :(得分:0)

延迟显示,以便隐藏动画完成:

 $('#a').click(function(){
    $('#accordion .in').collapse('hide');

  setTimeout(function(){ $('#collapseOne').collapse('show'); }, 500);

 });

http://jsfiddle.net/k9o2j53a/6/

您可以根据自己的目的调整延迟