【问题标题】:Bootstrap 3 Collapse - adding active class to open panelBootstrap 3 Collapse - 将活动类添加到打开面板
【发布时间】:2014-10-16 23:03:05
【问题描述】:

首先是小提琴:http://jsfiddle.net/krish7878/h38jn324/

单击面板时的简单问题(并展开以显示其各自的内容),需要将“活动”类添加到“面板标题”。

我发现了类似的问题,但这些解决方案似乎都不起作用(奇怪的是)。任何帮助,将不胜感激。

HTML 代码:

<div class="accordion-2 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">
                    Our Mission
                </a>
            </h4>
        </div><!-- /.panel-heading -->
        <div id="collapseOne" class="panel-collapse collapse in">
            <div class="panel-body">
                <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.</p>
            </div>
        </div><!-- /#collapseOne -->
    </div><!-- /.panel -->
<div class="panel panel-default">
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
                Success Stories
            </a>
        </h4>
    </div><!-- /.panel-heading -->
    <div id="collapseTwo" class="panel-collapse collapse">
        <div class="panel-body">
            <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.</p>
        </div><!-- /.panel-body -->
    </div><!-- /#collapseTwo -->
</div><!-- /.panel -->
<div class="panel panel-default last">
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
                Our Story
            </a>
        </h4>
    </div><!-- /.panel-heading -->
    <div id="collapseThree" class="panel-collapse collapse">
        <div class="panel-body">
            <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.</p>
        </div><!-- /.panel-body -->
    </div><!-- /#collapseTwo -->
</div><!-- /.panel -->

JS代码:

jQuery('.accordion-2 .panel-heading a[data-toggle="collapse"]').on('click', function () {   
jQuery('.accordion-2 .panel-heading a[data-toggle="collapse"]').removeClass('actives');
$(this).addClass('actives');

});

【问题讨论】:

  • actives 名称是拼写错误?应该是active
  • 嗨,没关系,没有添加任何课程。
  • 哦,当然。当我发表评论时,您选择的正确答案已经存在。我刚刚通知你一个可能的错字,而不是代码是正确的。
  • 哦,在那种情况下,非常感谢 thiagobraga

标签: javascript jquery html css twitter-bootstrap


【解决方案1】:

所有其他答案都需要面板标题。所有这些都需要数据目标。

$('[data-toggle=collapse]').each(function() {
    var $collapse_btn = $(this),
        $collapse_target =  $(this.getAttribute('data-target'));

    $collapse_target.on('show.bs.collapse', function () {
        $collapse_btn.addClass('collapsed');
    }).on('hide.bs.collapse', function () {
        $collapse_btn.removeClass('collapsed');
    });
});

【讨论】:

    【解决方案2】:

    试试这个:

    $('.panel-heading a').click(function() {
        $('.panel-heading').removeClass('active');
        if(!$(this).closest('.panel').find('.panel-collapse').hasClass('in'))
            $(this).parents('.panel-heading').addClass('active');
    });
    

    Check JSFiddle Demo

    更新 1: 要在第一次加载时将面板默认设置为活动状态,只需将 active 类手动添加到 HTML 代码中的 panel-heading 即可。

    更新 2: 尽管此答案被标记为已接受答案,但我强烈建议您也查看Blizwire 答案。

    【讨论】:

    • 你可以用$(this).parents('.panel-heading')代替$(this).parent().parent()
    • 嗨 Moshtaf,一个小小的补充可能会有所帮助,页面加载时需要加载该类
    • 什么课? accordion-2?
    • @chandan 你可以直接把这个类放到 HTML 中,避免更多的 JavaScript 函数,只在用户点击时使用该函数。将&lt;div class="panel-heading active"&gt; 用于您想要的面板。
    • 嗨 Moshtaf,哦,是的,我忘记了,但我认为可以通过 js 完成。非常感谢。
    【解决方案3】:

    对于正在寻找 CSS 解决方案的人,我只在 Bootstrap 4 中厌倦了这个:

    HTML

    <a class="collapsed" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample"> Open Collapse </a>
    
    <div class="collapse" id="collapseExample">
      <div class="card card-block card-outline-primary">
        <h3 class="text-center">Date Goes Here</h3>
      </div>
    </div>
    

    CSS

    [data-toggle="collapse"]:not(.collapsed) {
      background-color: blue;
    }
    

    【讨论】:

      【解决方案4】:

      当前答案(由 Moshtaf 提供)使用标准点击事件。但是,正如 Jurriaan 所指出的,Bootstrap 有一个用于打开/关闭可折叠项目的内置事件,使用起来更安全(单击链接并不一定意味着显示面板)。这是一个干净的解决方案,灵感来自 Jurriaan 的解决方案,使用最少的代码和 jQuery 选择器。 http://codepen.io/martinkrulltott/pen/mPgYgQ

      $(document).ready(function() {
        $('.panel-collapse').on('show.bs.collapse', function () {
          $(this).siblings('.panel-heading').addClass('active');
        });
      
        $('.panel-collapse').on('hide.bs.collapse', function () {
          $(this).siblings('.panel-heading').removeClass('active');
        });
      });
      

      【讨论】:

      • 这是最好的方法,因为 Moshtaf 的解决方案无法正常工作。当您单击同一面板时,它不会更改类。
      【解决方案5】:

      在某些情况下,这些答案对我不起作用:一页上有多个面板组,或者单击同一标题以隐藏面板。来自https://stackoverflow.com/a/24033761/842740 的这种改编作为通用解决方案,我添加了用于将默认打开面板设置为活动状态的代码。

      $('.panel-group .panel-collapse.in').prev().addClass('active');
      $('.panel-group')
        .on('show.bs.collapse', function(e) {
          $(e.target).prev('.panel-heading').addClass('active');
        })
        .on('hide.bs.collapse', function(e) {
          $(e.target).prev('.panel-heading').removeClass('active');
        });
      

      【讨论】:

        【解决方案6】:

        $(function() {
          $('.panel-heading').click(function() {
            if ($(this).hasClass('activestate')) {
              $(this).removeClass('activestate');
            } else {
              $('.panel-heading').removeClass('activestate');
              $(this).addClass('activestate');
            }
          });
        });
        a,
        a:hover,
        a:active,
        a:focus {
          text-decoration: none !important
        }
        .panel-heading:hover,
        .panel-heading:focus,
        .panel-heading:hover a,
        .panel-heading:focus a {
          color: #c9b27e;
          text-decoration: none !IMPORTANT;
        }
        .activestate {
          background-color: #c9b27e !IMPORTANT;
          color: white !important;
          display: block;
        }
        .activestate:hover a {
          color: black;
        }
        .panel-heading {
          display: block
        }
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
        <link rel="stylesheet" type="text/css" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" />
        <div class="accordion-2 panel-group" id="accordion">
          <div class="panel panel-default">
            <div class="panel-heading activestate">
              <h4 class="panel-title">
        						        <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
        						        	Our Mission
        						        </a>
        						      </h4>
            </div>
            <!-- /.panel-heading -->
            <div id="collapseOne" class="panel-collapse collapse in">
              <div class="panel-body">
                <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt
                  mollitia animi, id est laborum et dolorum fuga.</p>
              </div>
            </div>
            <!-- /#collapseOne -->
          </div>
          <!-- /.panel -->
          <div class="panel panel-default">
            <div class="panel-heading">
              <h4 class="panel-title">
        						        <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
        						         Success Stories
        						        </a>
        						      </h4>
            </div>
            <!-- /.panel-heading -->
            <div id="collapseTwo" class="panel-collapse collapse">
              <div class="panel-body">
                <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt
                  mollitia animi, id est laborum et dolorum fuga.</p>
              </div>
              <!-- /.panel-body -->
            </div>
            <!-- /#collapseTwo -->
          </div>
          <!-- /.panel -->
          <div class="panel panel-default last">
            <div class="panel-heading">
              <h4 class="panel-title">
        						        <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
        						         Our Story
        						        </a>
        						      </h4>
            </div>
            <!-- /.panel-heading -->
            <div id="collapseThree" class="panel-collapse collapse">
              <div class="panel-body">
                <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt
                  mollitia animi, id est laborum et dolorum fuga.</p>
              </div>
              <!-- /.panel-body -->
            </div>
            <!-- /#collapseTwo -->
          </div>
          <!-- /.panel -->
        </div>
        <!-- /.accordion-2 -->

        我认为这更符合逻辑。

        【讨论】:

          猜你喜欢
          • 2018-09-04
          • 2015-10-08
          • 2018-06-16
          • 1970-01-01
          • 2019-08-02
          • 2013-02-13
          • 2014-10-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多