Bootstrap 4 Collapse Accordion - всегда открыта одна панель
Я использую компонент коллапса Bootstrap 4.0 в гармошке, похожей на ту, что есть в их документах.
<div id="accordion">
<div class="card">
<div class="card-header" id="headingOne">
<h5 class="mb-0">
<button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Collapsible Group Item #1
</button>
</h5>
</div>
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingTwo">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Collapsible Group Item #2
</button>
</h5>
</div>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordion">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingThree">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Collapsible Group Item #3
</button>
</h5>
</div>
<div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordion">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
</div>
</div>
</div>
</div>
Таким образом, пункт № 1 расширен по умолчанию. Затем, когда вы нажимаете пункт № 3, #1 закрывается, а № 3 расширяется... Отлично!
Однако действие по умолчанию заключается в том, что если элемент № 3 развернут и вы щелкнете по этому заголовку, панель закроется, и у вас останется только список заголовков. Я хотел бы сделать еще один шаг вперед, где, если мы закроем Элемент №3, Элемент № 1 развернется, так что это будет панель "по умолчанию", которая будет открыта, если не было сделано никакого другого выбора.
Я видел решение для Bootstrap3, где одна панель всегда открыта, но я бы хотел иметь конкретную панель (элемент № 1) в качестве панели, которая открывается в качестве резервной копии. Это скрипт для удобства использования:
$('.panel-heading a').on('click',function(e){
if($(this).parents('.panel').children('.panel-collapse').hasClass('in')){
e.stopPropagation();
}
// You can also add preventDefault to remove the anchor behavior that makes
// the page jump
// e.preventDefault();
});
3 ответа
Вы можете использовать скрытое событие коллапса. В этом случае используйте .eq(0)
так как 0 является индексом первого разборного div.
$('.collapse').on('hidden.bs.collapse', function () {
$('.collapse').eq(0).collapse('show');
})
Чтобы сделать шаг вперед, вы можете добавить новый default
переменная данных для родительского #accordion...
<div id="accordion" class="accordion" data-default="1">..</div>
И затем измените jQuery для использования этой переменной..
/* default accordion variable method */
$('.collapse').on('hidden.bs.collapse', function () {
var defaultDiv = $($(this).data("parent")).data("default");
$('.collapse').eq(defaultDiv-1).collapse('show');
})
Демо: https://www.codeply.com/go/NilPIQD9oi
Другой вариант - предотвратить закрытие любого открытого аккордеона, как я объяснил в этом ответе.
Ты можешь попробовать
jQuery(function($){
$('[data-toggle=collapse]').on('click', function (e) {
e.preventDefault();
if(! $(this).hasClass('collapsed')){
e.stopPropagation();
return false;
}
});
});
/*------------ You can use attribute selector -------------*/
.card-header h5 button[aria -expanded = 'true'] {
cursor: not-allowed !important;
pointer-events: none;
}