使用Sammy时,Bootstrap下拉菜单未关闭

时间:2013-04-03 23:14:41

标签: twitter-bootstrap sammy.js

首先,我在我的应用程序中使用Bootstrap和Sammy.js。 我在下拉菜单(下拉按钮)中配置了一些锚点,分别导航到#/ login和#/ register。 问题是,当我点击登录/注册链接时,下拉菜单不会关闭。

我还附上了在Firefox中运行的截图。

我在这里做错了什么?

谢谢。

Screenshot

2 个答案:

答案 0 :(得分:4)

我最终使用的解决方案是手动处理这些点击。贝娄就是这样做的代码。

$('#header').delegate('a[href="#login"],a[href="#register"]', 'click', function() {
    sammy.setLocation($(this).attr('href'));
    $(this).closest('.dropdown-menu').trigger('click');
    return false;
});

其中:   sammy是通过Sammy(...)获得的实例

答案 1 :(得分:2)

它对我不起作用,但它帮助我找到了解决方案。

当您在下拉菜单上单击上方解决方案,然后单击另一个不在同一下拉列表中的菜单项时,它不会再次关闭。 所以我插入了sammy路线来关闭所有开放的路线:

this.get('#/', function() {
  $(".navbar-nav .dropdown").removeClass("open");
  $('#main').load('home.html');
});

请参阅此处的小提琴:http://jsfiddle.net/ehs70rLL/

我玩了一会儿,并尝试了我的第一个片段:)

;(function($) {
  var app = $.sammy(function() {

    this.get('#/:page', function() {
      var jmnu = $( 'a[href="#/' + this.params['page'] + '"]' );
      $(".navbar .dropdown").removeClass("open");  //close all open Dropdowns
      $('.navbar li').removeClass('active');
      $(jmnu).parent().addClass('active');
      $(jmnu).parents('li').addClass('active');
      $('#mainpage').html('<span>>> ' + this.params['page'] + '</span>');
    });

  });
  $(function() {
    app.run('#/One')
  });
})(jQuery);
/* No own CS is needed at all for functionality */
#mainpage { 
  padding-left: 60px; 
  font-size: 120%;
}

/* Non-responsive overrides, not needed for anything than snippet-preview in small window */
.navbar-header {
  float: left;
}
.navbar-collapse {
  display: block !important;
  height: auto !important;
  padding-bottom: 0;
  overflow: visible !important;
  visibility: visible !important;
}
.navbar-collapse {
  border-top: 0;
}
.navbar-nav {
  float: left;
  margin: 0;
}
.navbar-nav > li {
  float: left;
}
.navbar-nav > li > a {
  padding: 15px;
}
.navbar .navbar-nav .open .dropdown-menu {
  position: absolute;
  float: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, .15);
  border-width: 0 1px 1px;
  border-radius: 0 0 4px 4px;
}
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
  color: #333;
}
.navbar .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar .navbar-nav .open .dropdown-menu > li > a:focus,
.navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
  color: #fff !important;
  background-color: #428bca !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script src="https://raw.githubusercontent.com/quirkey/sammy/master/lib/min/sammy-latest.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">

<section id="navi">
  <!-- Navbar -->
  <nav class="navbar navbar-default">
    <div class="container-fluid">
      <div id="navbar" class="navbar-collapse collapse">
        <ul class="nav navbar-nav">
          <li class="active"><a href="#/One">One</a></li>
          <li><a href="#/Two">Two</a></li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Three<span class="caret"></span></a>
            <ul class="dropdown-menu" role="menu">
              <li><a href="#/Three-A">A</a></li>
              <li><a href="#/Three-B">B</a></li>
              <li><a href="#/Three-C">C</a></li>
            </ul>
          </li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Four<span class="caret"></span></a>
            <ul class="dropdown-menu" role="menu">
              <li><a href="#/Four-A">A</a></li>
              <li><a href="#/Four-B">B</a></li>
              <li><a href="#/Four-C">C</a></li>
            </ul>
          </li>
        </ul>
      </div><!--/.nav-collapse -->
    </div><!--/.container-fluid -->
  </nav>
</section>


<section id="mainpage"></section>