Задать вопрос
@nurzhannogerbek

Как раскрыть и закрыть несколько блоков одновременно?

Здравствуйте! Помогите пожалуйста разобраться.

Есть несколько раскрываемых блоков, которые необходимо открывать и закрывать (Expand/Collapse) с помощью одной основной кнопки (id=expand-collapse). Также у каждого такого блока есть индивидуальная кнопка, с помощью которой можно открыть один конкретный блок. Я использую Bootstrap 4 alpha 6 версию. На данный момент при нажатии основной кнопки открывается все блоки. Проблема начинается когда например открываю скажем первый блок, а затем с помощью основной кнопки пытаюсь раскрыть остальные блоки. На деле же первый блок закрывается, а все остальные открываются. Как исправить такое странное поведение?

HTML:
<div class="card">
   <div class="card-header">
      <button id='expand-collapse' type="button" data-parent="#blocks"  data-toggle="collapse" data-target=".block" aria-expanded="false" aria-controls=".block">
      </button>
   </div>

   <div class="card-block">
       <div id="blocks">
          <div class="list-group">

             <div class="list-group-item">
                <a data-toggle="collapse" href="#block-1" aria-expanded="false" aria-controls="block-1"></a>
                <div class="collapse block" id="block-1">
                   <!--FIRST BLOCK BLOCK-->
                </div>
             </div>

             <div class="list-group-item">
                <a data-toggle="collapse" href="#block-2" aria-expanded="false" aria-controls="block-2"></a>
                <div class="collapse block" id="block-2">
                   <!--SECOND BLOCK-->
                </div>
            </div>

            <div class="list-group-item">
                <a data-toggle="collapse" href="#block-3" aria-expanded="false" aria-controls="block-3"></a>
                <div class="collapse block" id="block-3">
                   <!--THIRD BLOCK-->
                </div>
            </div>

         </div>
      </div>
   </div>
</div>


Javascript:
$(function () {
    $('#expand-collapse').on('click',function(){
        $('button[data-toggle="collapse"]').each(function(){
            var objectID=$(this).attr('data-target');
            if($(objectID).hasClass('.collapse')===false)
            {
                $(objectID).collapse('show');
            }
        });
    });
});
  • Вопрос задан
  • 1372 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
aliksend
@aliksend
Software Engineer
Для поведения "если хотя бы одна открыта, закрыть все"
$(function () {
    $('#expand-collapse').on('click',function(){
        var allCollapsed = true;
        $('button[data-toggle="collapse"]').each(function(){
            var objectID=$(this).attr('data-target');
            if($(objectID).hasClass('.collapse')===false)
            {
                allCollapsed = false;
            }
        });
        $('button[data-toggle="collapse"]').each(function(){
            if (allCollapsed) {
                $(objectID).collapse('show');
            } else {
                $(objectID).collapse('hide');
            }
        });
    });
});


Для поведения "если хотя бы одна закрыта, открыть все"
$(function () {
    $('#expand-collapse').on('click',function(){
        var allExpanded = true;
        $('button[data-toggle="collapse"]').each(function(){
            var objectID=$(this).attr('data-target');
            if($(objectID).hasClass('.collapse')===true)
            {
                allExpanded = false;
            }
        });
        $('button[data-toggle="collapse"]').each(function(){
            if (allExpanded) {
                $(objectID).collapse('hide');
            } else {
                $(objectID).collapse('show');
            }
        });
    });
});


Честно говоря не тестировал, но если наличие класса "collapse" означает что элемент скрыт, должно работать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы