导航栏活动状态未正确同步

时间:2014-08-04 16:47:07

标签: jquery html twitter-bootstrap navbar

我的菜单不起作用。例如,当我点击购物车时,活动的菜单仍然是主页。什么似乎是问题?谢谢!

<html lang="en"><head>
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
            <script src="bootstrap/jquery.min.js"></script>
        <script src="bootstrap/js/bootstrap.min.js"></script>
  </head>

  <body>

    <div class="navbar navbar-default navbar-fixed-top" role="navigation">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="home.php">company</a>
        </div>
        <div class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="home.php"><i class="glyphicon glyphicon-home"></i><span>&nbsp;Home</span></a></li>
            <li><a href="cart.php"><i class="glyphicon glyphicon-shopping-cart"></i><span>&nbsp;Cart</span></a></li>
          </ul>
          <ul class="nav navbar-nav navbar-right">
            <li><a href="register.php"><i class="glyphicon glyphicon-registration-mark"></i><span>&nbsp;Register</span></a></li>
            <li class="active"><a href="login.php"><i class="glyphicon glyphicon-user"></i><span>&nbsp;Login</span></a></li>
          </ul>
        </div>
      </div>
    </div>
</body>
</html>


这是演示:http://jsfiddle.net/47r5Q/

1 个答案:

答案 0 :(得分:0)

有多种方法可以解决这个问题正如@Blazemonger所提到的,你应该实现自己的逻辑。你可以做这个服务器端或客户端。因为我不知道你在服务器端使用什么,我将展示如何使用jQuery轻松解决它。

想法是检查当前网址,如果当前网址==导航网址,则添加类处于活动状态。

$(document).ready(function()
{
    $('.navbar-nav > li > a').each(function(i, a)
    {
        var $a = $(a);
        var url = $a.attr('href');
        if(location.pathname.indexOf(url) == 1)
        {
            $a.parent().addClass('active');
        }
        else
        {
            $a.parent().removeClass('active');
        }
    });
});

location.pathname返回/ url-path,所以在您的示例/login.php中。要与login.php匹配,您需要检查url是否以第二个字符开头(skip /)。如果您更新网址并在其前面添加/,则可以将索引从1更改为0以使其正常工作。希望它有意义。

这是非常简单的代码(当然,你可以让它变得更好),但它是一个简单的例子,如何使它工作。