Twitter bootstrap 你如何让推特引导手风琴保持一组开放?
我正在尝试使用Twitter引导程序使用accordion和collapse插件来模拟Outlook栏,到目前为止,我已经让collapse和accordion正常工作了,但是现在它允许所有部分都被折叠 我想限制它,以便始终显示一个且只有一个 这就是我正在研究的一个:我认为它是沿着Twitter bootstrap 你如何让推特引导手风琴保持一组开放?,twitter-bootstrap,accordion,twitter-bootstrap-3,Twitter Bootstrap,Accordion,Twitter Bootstrap 3,我正在尝试使用Twitter引导程序使用accordion和collapse插件来模拟Outlook栏,到目前为止,我已经让collapse和accordion正常工作了,但是现在它允许所有部分都被折叠 我想限制它,以便始终显示一个且只有一个 这就是我正在研究的一个:我认为它是沿着 $('#accordions')。关于('hide',函数(事件){ console.warn(“隐藏已触发,检查是否尝试隐藏活动的,如果是,则停止”); }) 这里有一个简单的方法: 新引导3 用于引导3。 引导程
$('#accordions')。关于('hide',函数(事件){
console.warn(“隐藏已触发,检查是否尝试隐藏活动的,如果是,则停止”);
})
这里有一个简单的方法:
新引导3
用于引导3。
引导程序3的代码:
$('.panel heading a')。在('click',函数(e)上{
if($(this).parents('.panel').children('.panel collapse').hasClass('in')){
e、 停止传播();
}
//您还可以添加preventDefault以删除使
//页面跳转
//e.预防违约();
});
代码检查单击的元素是否是当前显示的元素(由类“in”显示),如果它确实有“in”类,则停止隐藏过程
不推荐的引导程序2 用于引导程序2。 引导程序2的代码:
$('.accordio toggle')。打开('click',函数(e){
if($(this).parents('.accordion group').children('.accordion body').hasClass('in')){
e、 停止传播();
}
//您还可以添加preventDefault以删除使
//页面跳转
//e.预防违约();
});
注意:如果您想在手风琴上附加更多的点击事件,请小心,因为
e.stopPropagation()
将阻止检查后发生的事件。我想精确说明@Hugo Dozois的答案
您应该添加e.preventDefault()
如果您的页面中有一个滚动条,则防止#
HTML锚的默认行为
$('.panel-heading a').on('click',function(e){
if($(this).parents('.panel').children('.panel-collapse').hasClass('in')){
e.preventDefault();
e.stopPropagation();
}
});
或者您可以使用简单的CSS技巧,如下所示:
/*
prevent the active panel from collapsing
*/
.panel-group [aria-expanded=true]{
/*
http://caniuse.com/#feat=pointer-events
Works for MOST modern browsers. (- Opera Mobile)
*/
pointer-events: none;
}
非活动面板链接上必须有适当的标签
aria-expanded="false"
根据bootstarp 3.3.6版本
这里有一具尸体
塌陷体2
2018年更新
下面介绍了如何在引导程序v3或v4中至少保持打开状态。这意味着打开的手风琴只能通过切换另一个打开的手风琴来关闭
引导4
此外,它还显示了如何指定一个“默认”手风琴,该手风琴将在所有其他手风琴关闭时打开
引导3
$('[data-toggle="collapse"]').on('click',function(e){
if($(this).parents('.panel').find('.collapse').hasClass('in')){
var idx = $(this).index('[data-toggle="collapse"]');
var idxShown = $('.collapse.in').index('.accordion-body');
if (idx==idxShown) {
e.stopPropagation();
}
}
});
问题1?
..
问题2?
..
问题3?
...
(注意:引导程序3中需要面板
类)引导程序4.0
此代码块检查单击的卡是否折叠(通过使用类查看div
collapse
)。当卡当前show
n时,它会停止。因为所有其他JS答案都使用stopPropagation()
这里是我的解决方案,仅使用本机引导事件(在引导4上测试)
$('#accordionExample').on('show.bs.collapse', function () {
$(this).data('isShowing', true);
});
$('#accordionExample').on('hide.bs.collapse', function (event) {
if (!$(this).data('isShowing')) {
event.preventDefault();
}
$(this).data('isShowing', false);
});
它利用了这样一个事实:点击一个折叠的元素将导致
显示.bs.collapse
,然后是隐藏.bs.collapse
。尽管单击open元素只会导致一个隐藏.bs.collapse
我有一个场景不适合任何发布的答案:同一页面上有多个accord,以及一些其他可折叠的组件,它们不是accord(没有数据父项
属性)
此代码仅在手风琴上触发,因为会检查数据父项
属性。
它也不采用卡
(或引导3的面板
)结构,它使用与引导api相同的属性
我希望它能有所帮助。提供的解决方案都不允许在同一页面中有多个手风琴,保持或不打开一个选项卡 以下是我的解决方案:
$("[data-toggle=buttons][data-oneopen=true] [data-toggle=collapse]").on("click", function (e) {
var me = $(this);
var target = $(me.attr("data-target") || me.attr("href"));
if (target.hasClass("show")) {
e.stopPropagation();
}
});
首先,我选择了一个dataoneopen
属性来标记这些手风琴按钮以启用此行为,但它可以替换为类或任何其他选择器
然后我检查数据目标
和href
属性以查找相关选项卡
最后,我
stopPropagation
如果项目有show
类,只需在类中将其更改为,即可获得引导3的解决方案。谢谢!没有使用完全相同的解决方案,但我需要的是e.stopPropagation()
!漂亮的添加e.preventDefault();在if语句之后,您的页面将不会在点击时跳转。非常感谢!它可以工作,但对于尚未折叠的图元,它不会工作。只有在第二个操作中。@Artistan此解决方案才能正常工作。但它是有效的。可折叠块必须是具有面板
类的块的子级。你可以举个例子。@gleb kemarsky它没有。主题清楚地说“保持一个组打开”,而您的“解决方案”允许折叠唯一打开的组“保持无打开”。@kpull1感谢您的澄清。我似乎误解了问题作者所遇到的困难。除了更好的造型外,我建议您帮助我解决这个问题,使用.on(“单击”,函数…
方式,以确保它在第一次使用后也能正常工作。
$('.card').click(function(e) {
if (
$(this)
.find('.collapse')
.hasClass('show')
) {
e.stopPropagation();
}
});
$('#accordionExample').on('show.bs.collapse', function () {
$(this).data('isShowing', true);
});
$('#accordionExample').on('hide.bs.collapse', function (event) {
if (!$(this).data('isShowing')) {
event.preventDefault();
}
$(this).data('isShowing', false);
});
$("[data-toggle=collapse][data-parent]").click(function (e) {
var button = $(this);
var parent = $(button.attr("data-parent"));
var panel = parent.find(button.attr("href") || button.attr("data-target"));
if (panel.hasClass("in")) {
e.preventDefault();
e.stopPropagation()
}
});
$("[data-toggle=buttons][data-oneopen=true] [data-toggle=collapse]").on("click", function (e) {
var me = $(this);
var target = $(me.attr("data-target") || me.attr("href"));
if (target.hasClass("show")) {
e.stopPropagation();
}
});