【问题标题】:Bootstrap: Using panel heading to collapse panel bodyBootstrap:使用面板标题折叠面板主体
【发布时间】:2016-02-16 22:47:11
【问题描述】:

我有一个带有面板标题和面板主体的 Bootstrap v3 面板。我希望用户能够单击面板标题,它将折叠/展开面板主体。我正在使用 Bootstrap 的 Collapse javascript 来执行此操作。这是我的标记:

<div class="panel panel-default group-panel">
  <div class="panel-heading" role="button" data-toggle="collapse" data-target="#panel-body-foobar">
    <a href="#" class="btn btn-xs">Action Button</a>
  </div>
  <div class="panel-body collapse in" id="panel-body-foobar">
    Some content here. 
  </div>
</div>

此代码工作正常,单击面板标题将折叠/展开正文。但是,请注意我在面板标题内还有一个按钮。当我单击该按钮时,它正在折叠/展开面板主体。如果您不明白我的意思,请参阅此jsfiddle

我如何配置它,以便仅直接单击面板标题而不是任何子元素将触发折叠/展开?

【问题讨论】:

标签: javascript jquery html twitter-bootstrap twitter-bootstrap-3


【解决方案1】:

我相信解决方案是定义我自己的点击处理程序(而不是使用 Bootstrap 自动设置的那个),它会忽略对子项的点击:

$('.panel-heading[data-toggle^="collapse"]').click(function(){
    var target = $(this).attr('data-target');
    $(target).collapse('toggle');
}).children().click(function(e) {
  e.stopPropagation();
});

感谢 this answer 帮助我弄清楚如何让 jQuery 点击处理程序忽略对子项的点击。请注意,由于使用了e.stopPropagation();,这不会禁用子级本身的任何点击处理程序。

【讨论】:

  • 解决方案就是停止从面板标题中的按钮传播,仅此而已:jsfiddle.net/mwxea7qn/1。您无需对 data-toggledata-target 属性执行任何其他操作。
  • 确实如此,但这需要我将该行放在所有孩子的点击处理程序中。在我的问题中,我想保持简单,所以我只包含了一个按钮,但在我的实际项目中,我确实有多个按钮,所以将它放在面板标题上似乎是有意义的。
  • 您不必按 ID 选择。这是一个演示,扩展了我最初的观点,以解决您在上面分享的问题:jsfiddle.net/mwxea7qn/2
  • 谢谢,现在我明白你在说什么了。你的答案绝对是有效的。
猜你喜欢
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2015-06-04
  • 2017-01-06
  • 2016-11-06
  • 2016-02-28
相关资源
最近更新 更多