我遇到了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');
});
重现:
因此,以编程方式打开面板似乎搞乱了关于面板状态的bootstraps内部注册?我没有看到第三个小组的“状态变化”出现明显的错误(它的类别从“崩溃”变为“进入”并且按照您的预期返回)。
答案 0 :(得分:28)
您可以为展示任何面板之前发生的折叠show
事件创建处理程序。
添加此项以确保在显示所选的其中之前关闭任何其他打开的面板:
$('#accordion').on('show.bs.collapse', function () {
$('#accordion .in').collapse('hide');
});
您可以在此处详细了解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();
}
}