javascript - Accordion ,如何自动折叠一个并展开下一个

标签 javascript angularjs accordion

我有一个带有三个“面板”的 Accordion ,第一个在初始加载时展开。

第一个面板有一个输入字段。当用户更新此字段时,我想自动展开下一个面板并折叠当前面板。

Accordion 本身按预期工作(我在页面上有可用的 jquery)。

我已经搜索过,但只找到了通过单击链接/按钮展开/折叠的示例。

我该怎么做?

这是我的代码:

$(document).ready(function() {
  // Add minus icon for collapse element which is open by default
  $(".collapse.in").each(function() {
    $(this).siblings(".panel-heading").find(".glyphicon").addClass("rotate");
  });

  // Toggle plus minus icon on show hide of collapse element
  $(".collapse").on('show.bs.collapse', function() {
    $(this).parent().find(".glyphicon").addClass("rotate");
  }).on('hide.bs.collapse', function() {
    $(this).parent().find(".glyphicon").removeClass("rotate");
  });
});
<div class="bs-example">
  <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="#collapseOne"><span
                            class="glyphicon glyphicon-menu-right"></span> Text</a>
        </h4>
      </div>
      <div id="collapseOne" class="panel-collapse collapse in">
        <div class="panel-body">
          <div class="row">
            <div class="col-sm-3">
              <label for="text">Text</label>
            </div>
            <div class="col-sm-1"></div>
            <div class="col-sm-8">
              <input type="text" class="form-control" id="textfield" ng-model="textfield" ng-blur="c.updatedField()">
              <br />
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"><span
                            class="glyphicon glyphicon-menu-right"></span> More text</a>
        </h4>
      </div>
      <div id="collapseTwo" class="panel-collapse collapse">
        <div class="panel-body">
          <h4 class="panel-title">More text</h4>

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

    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree"><span
                            class="glyphicon glyphicon-menu-right"></span> Even more text</a>
        </h4>
      </div>
      <div id="collapseThree" class="panel-collapse collapse">
        <div class="panel-body">
          <h4 class="panel-title">More text</h4>
        </div>
      </div>
    </div>
  </div>
</div>

最佳答案

您可以在此代码段中找到可行的解决方案。这个想法是手动操作引导折叠元素。

$(document).ready(function() {
  // Add minus icon for collapse element which is open by default
  $(".collapse.in").each(function() {
    $(this).siblings(".panel-heading").find(".glyphicon").addClass("rotate");
  });

  // Toggle plus minus icon on show hide of collapse element
  $(".collapse").on('show.bs.collapse', function() {
    $(this).parent().find(".glyphicon").addClass("rotate");
  }).on('hide.bs.collapse', function() {
    $(this).parent().find(".glyphicon").removeClass("rotate");
  });
});

$(document).on("change", "#textfield", function(){
    $("#collapseOne").collapse('hide');
    $("#collapseTwo").collapse('show');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>


<div class="bs-example">
  <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="#collapseOne"><span
                            class="glyphicon glyphicon-menu-right"></span> Text</a>
        </h4>
      </div>
      <div id="collapseOne" class="panel-collapse collapse in">
        <div class="panel-body">
          <div class="row">
            <div class="col-sm-3">
              <label for="text">Text</label>
            </div>
            <div class="col-sm-1"></div>
            <div class="col-sm-8">
              <input type="text" class="form-control" id="textfield" ng-model="textfield" ng-blur="c.updatedField()">
              <br />
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"><span
                            class="glyphicon glyphicon-menu-right"></span> More text</a>
        </h4>
      </div>
      <div id="collapseTwo" class="panel-collapse collapse">
        <div class="panel-body">
          <h4 class="panel-title">More text</h4>

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

    <div class="panel panel-default">
      <div class="panel-heading">
        <h4 class="panel-title">
          <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree"><span
                            class="glyphicon glyphicon-menu-right"></span> Even more text</a>
        </h4>
      </div>
      <div id="collapseThree" class="panel-collapse collapse">
        <div class="panel-body">
          <h4 class="panel-title">More text</h4>
        </div>
      </div>
    </div>
  </div>
</div>

关于javascript - Accordion ,如何自动折叠一个并展开下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180324/

相关文章:

javascript - 停止眨眼事件

javascript - ECMA6 指令的动态 Controller

javascript - Angular UI popover-html 抛出 $parse 错误

基于内置 CSS 类 .ui-accordion-header 的 Jquery Header Selection

javascript - 带有第一个 div 的 jQuery 自定义 Accordion 在初始加载时打开 - 修改箭头图像的问题

jquery - Bootstrap 3 折叠滚动顶部

javascript - 一个奇怪的 moment.js 事情

javascript - Firebase 的云功能 : Headers Error When Trying To Read From Realtime Database

JavaScript window.open 适用于所有浏览器的正确大小

angularjs - 是否可以使用 $rootScope 作为存储在 Angular 1 中实现类似 Redux 的架构?