Подтвердить что ты не робот

Загрузочный лоток: свернуть другие разделы, если один из них расширен

Я создаю приложение Rails и пытаюсь достичь определенной функциональности, связанной с Twitter Bootstrap collapse. Потерпите меня, когда я объясню это.

В настоящее время у меня есть следующее представление:

enter image description here

Когда каждая из этих кнопок нажата, их разделитель данных расширяется. Вид настроен следующим образом:

    <button class="btn dropdown" data-toggle="collapse" data-target="#keys"><i class="icon-chevron-right"></i> Keys <span class="badge badge-info pull-right"><%= @app.keys.count %></span></button>
    <button class="btn dropdown" data-toggle="collapse" data-target="#attrs"><i class="icon-chevron-right"></i> Attributes</button>
    <button class="btn dropdown" data-toggle="collapse" data-target="#edit"><i class="icon-chevron-right"></i> Edit Details</button>

    <div class="collapse indent" id="keys">
        <!--content-->
    </div>

    <div class="collapse indent" id="attrs">
        <!--content-->
    </div>

    <div class="collapse" id="edit">
        <!--content-->
    </div>

У меня они настроены так, потому что я хочу, чтобы кнопки были бок о бок подряд. Если я перемещаю кнопки, находящиеся прямо над представлением, они разворачиваются/сворачиваются, тогда кнопки складываются друг над другом.

Итак, моя конечная цель состоит в том, чтобы иметь три кнопки бок о бок и заставить их свернуть и расширить их соответствующие разделы. Однако текущие работы по настройке немного неудобны. Например, если кто-то расширяет раздел ключей, а затем расширяет раздел атрибутов, они должны прокручиваться под секцией ключей.

Существует два возможных решения этой проблемы. Один из них заключается в том, что нажатие одной кнопки приводит к тому, что другие 2 рушится. Это означало бы, что в любой момент времени расширяется только один из этих разделов.

Лучшее решение, я думаю, будет иметь его так, что когда ключи будут расширены, кнопки вправо перемещаются вниз к основанию клавиш div, а когда атрибуты будут расширены, кнопка редактирования деталей перемещается в нижнюю часть этого div. Это возможно? Я уже пытался это сделать, позволяя кнопкам складываться друг на друга и меняя их относительные местоположения через css, но это не сработало, потому что когда один из разделов был расширен, остальные кнопки оказались в неудобных местах в в середине расширенного раздела.

Наконец, я хотел бы попытаться сделать это без поведения стиля аккордеона, как указано на странице загрузки twitter, но если кто-то сможет убедить меня с точки зрения дизайна, что это предпочтительнее, я бы, конечно, пересмотрел.

4b9b3361

Ответ 1

Используя data-parent, первое решение - придерживаться архитектуры селектора примеров

<div id="myGroup">
    <button class="btn dropdown" data-toggle="collapse" data-target="#keys" data-parent="#myGroup"><i class="icon-chevron-right"></i> Keys  <span class="badge badge-info pull-right">X</span></button>
    <button class="btn dropdown" data-toggle="collapse" data-target="#attrs" data-parent="#myGroup"><i class="icon-chevron-right"></i> Attributes</button>
    <button class="btn dropdown" data-toggle="collapse" data-target="#edit" data-parent="#myGroup"><i class="icon-chevron-right"></i> Edit Details</button>

    <div class="accordion-group">
        <div class="collapse indent" id="keys">
            keys
        </div>

        <div class="collapse indent" id="attrs">
            attrs
        </div>

        <div class="collapse" id="edit">
            edit
        </div>
    </div>
</div>

Демо (jsfiddle)

Второе решение заключается в привязке к событиям и скрыть другие сворачивающиеся элементы.

var $myGroup = $('#myGroup');
$myGroup.on('show.bs.collapse','.collapse', function() {
    $myGroup.find('.collapse.in').collapse('hide');
});

Демо (jsfiddle)

PS: странный эффект в демонстрациях вызван набором min-height для примера, просто игнорируйте это.


Изменить: изменилось событие JS от show до show.bs.collapse, как указано в Документация по загрузке.

Ответ 2

Если вы не хотите менять свою разметку, эта функция выполняет трюк:

jQuery('button').click( function(e) {
    jQuery('.collapse').collapse('hide');
});

Всякий раз, когда нажимается кнопка, все секции обрушиваются. Затем bootstrap открывает выбранную вами.

Ответ 3

Если вы используете Bootstrap 4, и вы не хотите менять свою разметку:

var $myGroup = $('#myGroup');
$myGroup.on('show.bs.collapse','.collapse', function() {
$myGroup.find('.collapse.show').collapse('hide');
});

Ответ 4

Пример Bootstrap 3 с боковыми кнопками ниже содержимого

.panel-heading {
  display: inline-block;
}

.panel-group .panel+.panel {
  margin: 0;
  border: 0;
}

.panel {
  border: 0 !important;
  -webkit-box-shadow: none !important;
  box-shadow: none !important;
  background-color: transparent !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>


<div class="panel-group" id="accordion">
    <div class="panel panel-default">
        <div id="collapse1" class="panel-collapse collapse in">
            <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
        </div>
    </div>
    <div class="panel panel-default">
        <div id="collapse2" class="panel-collapse collapse">
            <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
        </div>
    </div>
    <div class="panel panel-default">
        <div id="collapse3" class="panel-collapse collapse">
            <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
        </div>
    </div>
</div>
<div class="panel-heading">
    <h4 class="panel-title">
        <a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Collapsible Group 1</a>
    </h4>
</div>
<div class="panel-heading">
    <h4 class="panel-title">
        <a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Collapsible Group 2</a>
    </h4>
</div>
<div class="panel-heading">
    <h4 class="panel-title">
        <a data-toggle="collapse" data-parent="#accordion" href="#collapse3">Collaple Group 3</a>
    </h4>
</div>

Ответ 5

Если вы придерживаетесь структуры HTML и правильных селекторов в соответствии с соглашением Bootstrap, вы должны быть в порядке.

<div class="panel-group" id="accordion">
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Collapsible Group 1</a>
        </h4>
      </div>
      <div id="collapse1" class="panel-collapse collapse in">
        <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
      </div>
    </div>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Collapsible Group 2</a>
        </h4>
      </div>
      <div id="collapse2" class="panel-collapse collapse">
        <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
      </div>
    </div>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapse3">Collapsible Group 3</a>
        </h4>
      </div>
      <div id="collapse3" class="panel-collapse collapse">
        <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
        sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
        quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
      </div>
    </div>
</div> 

DEMO

Ответ 6

Использовать этот:

$('.panel-defaul.ph').on('show.bs.collapse', function () {
    $(this).children('.panel-heading').addClass('panel-heading-collapsed');  
    $('.panel-defaul.ph').not(this).children('.panel-collapse').removeClass('in');
}); 

Ответ 7

В начальной загрузке 4 для закрытия всех свернутых работает так:

ДЕЙСТВИЕ:

<button id="CloseAll" class="btn btn-primary" type="button" data-toggle="collapse">Close All</button>

Jquery:

$(document).ready(function() {
    $("#CloseAll").on('click', function() {
        $(".collapse").removeClass("show");
    });
});

Ответ 8

Для Bootstrap v4.1

Добавьте data-parent атрибута в collapse элементы, а не на button.

<div id="myGroup">
<button class="btn dropdown" data-toggle="collapse" data-target="#keys"><i class="icon-chevron-right"></i> Keys  <span class="badge badge-info pull-right">X</span></button>
<button class="btn dropdown" data-toggle="collapse" data-target="#attrs"><i class="icon-chevron-right"></i> Attributes</button>
<button class="btn dropdown" data-toggle="collapse" data-target="#edit"><i class="icon-chevron-right"></i> Edit Details</button>

<div class="accordion-group">
    <div class="collapse indent" id="keys"  data-parent="#myGroup">
        keys
    </div>

    <div class="collapse indent" id="attrs"  data-parent="#myGroup">
        attrs
    </div>

    <div class="collapse" id="edit"  data-parent="#myGroup">
        edit
    </div>
</div>

Ответ 9

работать как прелесть здесь для начальной загрузки 4> 4.1.1

var myGroup = $('your-list');

myGroup.on('show.bs.collapse','.collapse', function() {
   myGroup.find('.collapse.show').collapse('hide');
});

Ответ 10

Метод работает правильно Для меня:

var lanopt = $(".language-option");

lanopt.on("show.bs.collapse",".collapse", function(){
   lanopt.find(".collapse.in").collapse("hide");
});

Ответ 11

Это было полезно для меня:

    jQuery('button').click( function(e) {
    jQuery('.in').collapse('hide');
});

Разрушился уже открытый раздел. Спасибо GrafiCode Studio