在以编程方式打开面板后,Bootstrap 3折叠可以打开多个面板

时间:2013-10-03 11:40:08

标签: twitter-bootstrap twitter-bootstrap-3 collapse

我遇到了bootstrap 3崩溃的问题,在以编程方式打开面板后,可以在重新打开第一个面板时保持另一个面板打开。

我的 HTML

<button type="button" class="btn showpanel">Show panel 3</button>
<button type="button" class="btn hidepanel">Hide panel 3</button>
<button type="button" class="btn openpanel">Open panel 3</button>
<button type="button" class="btn closepanel">Close panel 3</button>
<hr/>
<div class="panel-group" id="accordion">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#panel1">Panel 1</a>
            </h4>
        </div>
        <div id="panel1" class="panel-collapse collapse">
            <div class="panel-body">
                Contents panel 1
            </div>
        </div>
    </div>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#panel2">Panel 2</a>
            </h4>
        </div>
        <div id="panel2" class="panel-collapse collapse">
            <div class="panel-body">
                Contents panel 2
            </div>
        </div>
    </div>
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion" href="#panel3">Panel 3</a>
            </h4>
        </div>
        <div id="panel3" class="panel-collapse collapse">
            <div class="panel-body">
                Contents panel 3
            </div>
        </div>
    </div>
</div>

还有一些 JavaScript

$(".hidepanel").on("click", function() {
    $("#panel3").parent().hide();
});
$(".showpanel").on("click", function() {
    $("#panel3").parent().show();
});
$(".openpanel").on("click", function() {
    $("#panel3").collapse('show');
});
$(".closepanel").on("click", function() {
    $("#panel3").collapse('hide');
});

My jsfiddle that demonstrates this issue

重现:

  1. 点击“打开面板3”按钮。
  2. 点击“面板2”将其打开。到目前为止没有任何问题。
  3. 点击“面板3”再次打开它。第2小组仍然开放!
  4. 因此,以编程方式打开面板似乎搞乱了关于面板状态的bootstraps内部注册?我没有看到第三个小组的“状态变化”出现明显的错误(它的类别从“崩溃”变为“进入”并且按照您的预期返回)。

3 个答案:

答案 0 :(得分:28)

您可以为展示任何面板之前发生的折叠show事件创建处理程序。

添加此项以确保在显示所选的其中之前关闭任何其他打开的面板:

$('#accordion').on('show.bs.collapse', function () {
    $('#accordion .in').collapse('hide');
});

Bootply demo

您可以在此处详细了解collapse个活动:http://getbootstrap.com/javascript/#collapse

答案 1 :(得分:2)

我认为问题是由于您更改打开面板的方式。您需要在相应的面板链接上触发click事件,而不是使用“show”功能。例如,带有id“手风琴”的手风琴,带有三个面板,如果你想显示2面板,那么使用:

$("a[href=#accordion-2]").click()

或者您给第二个面板提供的任何ID(我使用twitterboostrapmvc,因此面板ID是根据手风琴ID自动生成的)。

答案 2 :(得分:0)

对于使用data-target属性来控制手风琴(而不是href属性)的任何人,这是对ProfNimrod的答案的改编,如果目标是当前的话,它将点击相关元素隐。 (请注意,if检查依赖于设置默认情况下应用的collapsed类的手风琴,无论如何我都觉得它很有用,可以利用using css to put a chevron icon on the accordions

var expandAccordion = function() {
    var header = $('[data-target="#accordion-0"]');
    if (header.hasClass('collapsed')) {
        header.click();
    }
}