Настроить toggle анимацию
У меня возникла проблема с анимацией. Я использую bootstrap для того чтобы создать учебный сайтик и никак не могу понять, как бы сделать так, чтобы при нажатии на "Выбрать несколько" открывались все колапсы внутри одной карточки (завтраки, обеды и тд). Я видимо не вижу ошибки, но он открывает только 1-ый элемент ссылка на гит
<div class="card m-3 h-100" style="width: 26rem;">
<img src="static/images/img1.jpg" class="card-img-top">
<div class="card-body">
<h5 class="card-title">Понедельник</h5>
<p style='font-size: 1.3rem;'>{{m}}</p>
<form method="POST" action="/delete">
<button type="button" id="toggle" class="btn btn-outline-primary mb-3 mr-3" data-toggle="collapse" data-target=".multi-collapse" aria-expanded="false" aria-controls="collapseOne collapseTwo collapseThree collapseFour" >Выбрать несколько</button>
<button type="submit" id="delete" class="btn btn-outline-danger mb-3" style="display: none;">Удалить</button>
<div class="accordion" id="accordionExample">
<div class="card">
<div class="card-header" id="headingOne">
<h5 class="mb-0">
<button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseOne"
aria-expanded="false" aria-controls="collapseOne">
Завтраки
</button>
</h5>
</div>
<div id="collapseOne" class="collapse multi-collapse" aria-label="collapseOne"
data-parent="#accordionExample">
<div class="card-body">
{%for i in MondayZ%}
<input name='checked' style="display: none;" class="checkbox" type='checkbox' id='{{ i[0] }}'
value='{{ i[0] }}/{{ i[3] }}/{{ i[2] }}/{{i[4]}}'>
<label name='checked' for='{{ i[0] }}'>{{ i[0] }} {{i[2]}}</label><br>
{%endfor%}
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingTwo">
<h5 class="mb-0">
<button class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo"
aria-expanded="false" aria-controls="collapseTwo">
Обеды
</button>
</h5>
</div>
<div id="collapseTwo" class="collapse multi-collapse" aria-label="collapseTwo"
data-parent="#accordionExample">
<div class="card-body">
{%for i in MondayO%}
<input name='checked' style="display: none;" class="checkbox" type='checkbox' id='{{ i[0] }}'
value='{{ i[0] }}/{{ i[3] }}/{{ i[2] }}/{{i[4]}}'>
<label name='checked' for='{{ i[0] }}'>{{ i[0] }} {{i[2]}}</label><br>
{%endfor%}
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingThree">
<h5 class="mb-0">
<button class="btn btn-link collapsed" type="button" data-toggle="collapse"
data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Ужины
</button>
</h5>
</div>
<div id="collapseThree" class="collapse" aria-label="collapseThree"
data-parent="#accordionExample">
<div class="card-body">
{%for i in MondayY%}
<input name='checked' style="display: none;" class="checkbox" type='checkbox' id='{{ i[0] }}'
value='{{ i[0] }}/{{ i[3] }}/{{ i[2] }}/{{i[4]}}'>
<label name='checked' for='{{ i[0] }}'>{{ i[0] }} {{i[2]}}</label><br>
{%endfor%}
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingFour">
<h5 class="mb-0">
<button class="btn btn-link collapsed" type="button" data-toggle="collapse"
data-target="#collapseFour" aria-expanded="false" aria-controls="collapseFour">
Перекусы
</button>
</h5>
</div>
<div id="collapseFour" class="collapse" aria-label="collapseFour"
data-parent="#accordionExample">
<div class="card-body">
{%for i in MondayP%}
<input name='checked' style="display: none;" class="checkbox" type='checkbox' id='{{ i[0] }}'
value='{{ i[0] }}/{{ i[3] }}/{{ i[2] }}/{{i[4]}}'>
<label name='checked' for='{{ i[0] }}'>{{ i[0] }} {{i[2]}}</label><br>
{%endfor%}
</div>
</div>
</div>
</div>
</form>
</div>
</div>
Ответы (1 шт):
Ты пытаешься "поженить" бустраповские панели с "мультиколаппсом" и "аккордеон". По итогу оно работает не так, как ожидалось. Предлагаю перейти частично на JavaScript, отказавшись от multi-collapse.
Кнопка <button type="button" id="toggle" ...>...</button> освобождается от управления бустраповскими элементами через атрибуты тэга. Это будет просто кнопка с id, по которому наш JS код будет искать все подходящие элементы в аккордеоне и менять их состояние с открытого на закрытое и обратно
$('#toggle').on('click', function () {
$('.accordion .collapse').collapse('toggle');
});
Вот здесь инфа по этому способу: Bootstrap4 docs
Кроме того можно удалить ставшие ненужными атрибуты тэгов касательно "multi-collapse".
Рабочий вариант лежит здесь