我正在使用Bootstrap 3并尝试设置以下手风琴/折叠结构:
-
Onload:组中的每个折叠面板都完全折叠,并按记录/预期运行 .
-
按钮单击:每个折叠面板都会展开,单击切换无效(包括URL锚点效果) .
-
另一个按钮单击:所有面板返回到onload状态;全部折叠并可正常点击 .
我已经进入第2步,但是当我在第3步再次单击该按钮时,它没有任何效果 . 我还看到Chrome Dev Tools中没有报告控制台错误,也没有通过本地JSHint运行代码 .
我希望每次单击按钮时此循环都是可重复的 .
我在这里设置了我的代码http://bootply.com/98140,这里http://jsfiddle.net/A9vCx/
我很想知道我做错了什么,我很欣赏建议 . 谢谢!
我的HTML:
<button class="collapse-init">Click to disable accordion behavior</button>
<br><br>
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
Collapsible Group Item #1
</a>
</h4>
</div>
<div id="collapseOne" class="panel-collapse collapse">
<div class="panel-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
Collapsible Group Item #2
</a>
</h4>
</div>
<div id="collapseTwo" class="panel-collapse collapse">
<div class="panel-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
Collapsible Group Item #3
</a>
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse">
<div class="panel-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
</div>
</div>
</div>
</div>
我的JS:
$(function() {
var $active = true;
$('.panel-title > a').click(function(e) {
e.preventDefault();
});
$('.collapse-init').on('click', function() {
if(!$active) {
$active = true;
$('.panel-title > a').attr('data-toggle', 'collapse');
$('.panel-collapse').collapse({'toggle': true, 'parent': '#accordion'});
$(this).html('Click to disable accordion behavior');
} else {
$active = false;
$('.panel-collapse').collapse({'toggle': true, 'parent': '#accordion'});
$('.panel-title > a').removeAttr('data-toggle');
$(this).html('Click to enable accordion behavior');
}
});
});
4 回答
更新了答案
试图打开折叠控件的多个面板,设置为手风琴,即
data-parent
属性设置,可以证明是有问题和错误(请参阅multiple panels open after programmatically opening a panel上的这个问题)相反,最好的方法是:
允许每个面板单独切换
然后,在适当的时候手动强制执行手风琴行为 .
To allow each panel to toggle individually ,在
data-toggle="collapse"
元素上,将data-target
属性设置为.collapse
面板ID选择器(而不是将data-parent
属性设置为父控件 . 您可以在Modify Twitter Bootstrap collapse plugin to keep accordions open问题中阅读更多相关信息 .粗略地说,每个面板应如下所示:
To manually enforce the accordion behavior ,您可以为显示任何面板之前发生的折叠显示事件创建处理程序 . 使用此选项可确保在显示所选的其中之前关闭任何其他打开的面板(请参阅此answer to multiple panels open) . 您还只希望在面板处于活动状态时执行代码 . 要做到这一切,请添加以下代码:
然后使用
show
和hide
切换每个面板的可见性,并使用data-toggle
启用和禁用控件 .在jsFiddle中运行演示
无论出于何种原因
$('.panel-collapse').collapse({'toggle': true, 'parent': '#accordion'});
似乎只是第一次工作,它只能扩展可折叠 . (我尝试从扩展的可折叠开始,它不会崩溃 . )它可能只是在您第一次使用这些参数初始化折叠时运行的东西 .
使用
show
和hide
方法可以获得更多运气 .这是一个例子:
http://bootply.com/98201
Update
当然, KyleMit 似乎有更好的处理方式 . 他的回答和理解给我留下了深刻的印象 .
我不会继续't understand what'或者为什么
show
似乎在某些地方切换 .但经过一段时间的搞乱......最后带来了以下解决方案:
http://bootply.com/98239
为了在想要使用'hide'和'show'函数(如
.collapse( 'hide' )
)时保持手风琴的性质完整,必须在对toggle: false
进行任何调用之前使用toggle: false
在对象中设置的父属性初始化可折叠面板,然后再调用'hide'或'show'best and tested solution 将放置以下小片段,它将折叠已加载时已打开的折叠式选项卡 . 在我的情况下,最后一个第六个选项卡是打开的,所以我在页面加载时折叠了 .