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

Moo*_*lie 17 collapse twitter-bootstrap twitter-bootstrap-3

我有一个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>
Run Code Online (Sandbox Code Playgroud)

还有一些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');
});
Run Code Online (Sandbox Code Playgroud)

我的jsfiddle演示了这个问题

重现:

  1. 单击"打开面板3"按钮.
  2. 单击"面板2"将其打开.到目前为止没有问题.
  3. 单击"面板3"再次打开它.第2小组仍然开放!

因此,以编程方式打开面板似乎搞乱了关于面板状态的bootstraps内部注册?我没有看到第三个小组的"状态变化"有任何明显的错误(它的类别从"崩溃"变为"进入"并且按照您的预期返回).

Zim*_*Zim 28

您可以为崩溃show事件创建处理程序,该处理程序在任何面板显示之前发生.

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

$('#accordion').on('show.bs.collapse', function () {
    $('#accordion .in').collapse('hide');
});
Run Code Online (Sandbox Code Playgroud)

Bootply演示

您可以在collapse此处阅读有关事件的更多信息:http://getbootstrap.com/javascript/#collapse

  • 如果我很好理解崩溃小部件,我的html应该让手风琴充当'一个面板打开最大',因为我使用的数据父属性,你也可以创建一个'多开放式面板'手风琴使用data-target属性(例如,请参阅http://plnkr.co/edit/OxbVII?p=preview).所以我想如果我手动打开或关闭一个面板,手风琴应该遵循这个原则. (2认同)