@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');
            }
        });
    });
});
  • Вопрос задан
  • 1336 просмотров
Решения вопроса 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" означает что элемент скрыт, должно работать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект