Проверьте и сделайте что-нибудь, если все bootstrap аккордеоны открыты - PullRequest
0 голосов
/ 16 марта 2020

У меня есть bootstrap аккордеон, а также кнопка «открыть все», «закрыть все», которая работает нормально, но я пытаюсь сделать это, когда аккордеоны открываются вручную, а не открытым, закрыть все кнопка имеет кнопку изменить, чтобы "закрыть все". Есть ли способ проверить, все ли аккордеоны открыты, чтобы я мог добавить функциональность кнопки? Я знаю, что вы можете использовать show.bs.collapse и hidden.bs.collapse, чтобы увидеть, открыт ли аккордеон, но как бы вы проверили, открыты ли ALL?

<!-- panel -->
<div class="panel accordion-toggle" href="#panelOne" data-toggle="collapse">
    <div class="panel-heading">
        <div class="l-col-panel">
            <div class="panel-title__wrapper">
                <div class="accordion__text">
                    <!--panel title -->
                    <h3 class="title-3">Title</h3>
                </div>
            </div>
            <div class="accordion-toggle__angle-icon">
                <!-- angle icon -->
                <i class="accordion__angle fa fa-angle-down"></i>
            </div>
        </div>
        <!-- /.l-col-panel -->
    </div>
    <div id="panelOne" class="panel-collapse collapse">
        <div class="panel-body">

            <div class="panel-content">
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, voluptate!</p>
            </div>
        </div>
    </div>
</div>
<!--end: panel -->

<!-- panel -->
<div class="panel accordion-toggle" href="#panelOne" data-toggle="collapse">
    <div class="panel-heading">
        <div class="l-col-panel">
            <div class="panel-title__wrapper">
                <div class="accordion__text">
                    <!--panel title -->
                    <h3 class="title-3">Title</h3>
                </div>
            </div>
            <div class="accordion-toggle__angle-icon">
                <!-- angle icon -->
                <i class="accordion__angle fa fa-angle-down"></i>
            </div>
        </div>
        <!-- /.l-col-panel -->
    </div>
    <div id="panelTwo" class="panel-collapse collapse">
        <div class="panel-body">

            <div class="panel-content">
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, voluptate!</p>
            </div>
        </div>
    </div>
</div>
<!--end: panel -->

<!-- panel -->
<div class="panel accordion-toggle" href="#panelOne" data-toggle="collapse">
    <div class="panel-heading">
        <div class="l-col-panel">
            <div class="panel-title__wrapper">
                <div class="accordion__text">
                    <!--panel title -->
                    <h3 class="title-3">Title</h3>
                </div>
            </div>
            <div class="accordion-toggle__angle-icon">
                <!-- angle icon -->
                <i class="accordion__angle fa fa-angle-down"></i>
            </div>
        </div>
        <!-- /.l-col-panel -->
    </div>
    <div id="panelThree" class="panel-collapse collapse">
        <div class="panel-body">

            <div class="panel-content">
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, voluptate!</p>
            </div>
        </div>
    </div>
</div>
<!--end: panel -->

jQuery:

  $('.panel-collapse').on('shown.bs.collapse', function () {
  console.log('OPEN')
});

$('.panel-collapse').on('hidden.bs.collapse', function () {
  console.log('CLOSED')
});

1 Ответ

1 голос
/ 16 марта 2020

$('#panelOne').on('shown.bs.collapse', function () {
  let itemsList = document.getElementsByClassName('panel-collapse');
  let isOpen = [];
  for (let item of itemsList) {
      if (item.classList.contains('in')) {
        isOpen.push(true)
      } else {
        isOpen.push(false)
      }
  }
  
  let allOpen = !isOpen.includes(false)
  console.log(allOpen)
})
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <!-- panel -->
<div class="panel accordion-toggle" href="#panelOne" data-toggle="collapse">
    <div class="panel-heading">
        <div class="l-col-panel">
            <div class="panel-title__wrapper">
                <div class="accordion__text">
                    <!--panel title -->
                    <h3 class="title-3">Title</h3>
                </div>
            </div>
            <div class="accordion-toggle__angle-icon">
                <!-- angle icon -->
                <i class="accordion__angle fa fa-angle-down"></i>
            </div>
        </div>
        <!-- /.l-col-panel -->
    </div>
    <div id="panelOne" class="panel-collapse collapse">
        <div class="panel-body">

            <div class="panel-content">
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, voluptate!</p>
            </div>
        </div>
    </div>
</div>
<!--end: panel -->

<!-- panel -->
<div class="panel accordion-toggle" href="#panelTwo" data-toggle="collapse">
    <div class="panel-heading">
        <div class="l-col-panel">
            <div class="panel-title__wrapper">
                <div class="accordion__text">
                    <!--panel title -->
                    <h3 class="title-3">Title</h3>
                </div>
            </div>
            <div class="accordion-toggle__angle-icon">
                <!-- angle icon -->
                <i class="accordion__angle fa fa-angle-down"></i>
            </div>
        </div>
        <!-- /.l-col-panel -->
    </div>
    <div id="panelTwo" class="panel-collapse collapse">
        <div class="panel-body">

            <div class="panel-content">
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, voluptate!</p>
            </div>
        </div>
    </div>
</div>
<!--end: panel -->

<!-- panel -->
<div class="panel accordion-toggle" href="#panelThree" data-toggle="collapse">
    <div class="panel-heading">
        <div class="l-col-panel">
            <div class="panel-title__wrapper">
                <div class="accordion__text">
                    <!--panel title -->
                    <h3 class="title-3">Title</h3>
                </div>
            </div>
            <div class="accordion-toggle__angle-icon">
                <!-- angle icon -->
                <i class="accordion__angle fa fa-angle-down"></i>
            </div>
        </div>
        <!-- /.l-col-panel -->
    </div>
    <div id="panelThree" class="panel-collapse collapse">
        <div class="panel-body">

            <div class="panel-content">
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, voluptate!</p>
            </div>
        </div>
    </div>
</div>
<!--end: panel -->

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://code.jquery.com/jquery-1.12.4.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
  </body>
</html>

Вы можете проверить, существует класс in или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...