首页  >  文章  >  web前端  >  如何防止 Bootstrap 下拉菜单在单击内部时关闭?

如何防止 Bootstrap 下拉菜单在单击内部时关闭?

Barbara Streisand
Barbara Streisand原创
2024-10-25 12:48:02624浏览

How to Prevent Bootstrap Dropdown from Closing When Clicking Inside?

防止点击下拉菜单内部时关闭

在 Twitter Bootstrap 中,下拉菜单会在点击(即使是点击菜单内部)时关闭。为了避免这种情况,可以给下拉菜单附加一个 click 事件处理程序并添加著名的 event.stopPropagation()。

<code class="html"><ul class="nav navbar-nav">
  <li class="dropdown mega-dropdown">
    <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
      <i class="fa fa-list-alt"></i> Menu item 1
      <span class="fa fa-chevron-down pull-right"></span>
    </a>
    <ul class="dropdown-menu mega-dropdown-menu">
      <li>
        <div id="carousel" class="carousel slide" data-ride="carousel">
          <ol class="carousel-indicators">
            <li data-slide-to="0" data-target="#carousel"></li>
            <li class="active" data-slide-to="1" data-target="#carousel"></li>
          </ol>
          <div class="carousel-inner">
            <div class="item">
              <img alt="" class="img-rounded" src="img1.jpg">
            </div>
            <div class="item active">
              <img alt="" class="img-rounded" src="img2.jpg">
            </div>
          </div>
          <a data-slide="prev" role="button" href="#carousel" class="left carousel-control">
            <span class="glyphicon glyphicon-chevron-left"></span>
          </a>
          <a data-slide="next" role="button" href="#carousel" class="right carousel-control">
            <span class="glyphicon glyphicon-chevron-right"></span>
          </a>
        </div>
      </li>
    </ul>
  </li>
</ul></code>

这个方法看起来很容易,也很常见,但是由于 carousel-controls(以及 carousel indicators)的事件处理程序委托给了 document 对象,所以对这些元素(prev/next 控件等)的点击事件将被“忽略”。

<code class="js">$('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event){
    // 不会向document 节点传播事件
    // 所以委托的事件不会被触发
    event.stopPropagation();
});</code>

依赖 Twitter Bootstrap 的 dropdown hide/hidden 事件不是解决方案,原因如下:

  • 这两个事件处理程序提供的事件对象不引用所点击的元素。
  • 无法控制下拉菜单的内容,因此无法添加 flag 类或属性。

以下是正常行为的小提琴演示和添加了 event.stopPropagation() 的小提琴演示。

更新

感谢 Roman 的回答。我也找到了另一个答案,如下:

<code class="js">$(document).on('click', 'someyourContainer .dropdown-menu', function (e) {
  e.stopPropagation();
});</code>

以上是如何防止 Bootstrap 下拉菜单在单击内部时关闭?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn