Bootstrap 3导航栏链接不起作用

时间:2015-02-17 03:53:16

标签: javascript jquery html css twitter-bootstrap

我有一个带有链接的导航栏。 "品牌"链接正在运行但ul没有。我已经阅读了e.preventDefault();$('ul.nav > li').click(function (e) {有关的问题。我也读过与z-index有关的地方。我找不到任何一种情况(除非我发现它不是嵌入在加载了应用程序的js文件中而不是驻留在我的资产文件夹中。)

是什么导致这种情况?

我不确定它是在css还是js文件中。 此外,切换工作正常,它只是活动链接。

<head>
<title>Welcome</title>
<meta charset='utf-8'>
<meta content='IE=edge' http-equiv='X-UA-Compatible'>
<meta content='width=device-width, initial-scale=1' name='viewport'>
<meta content='' name='description'>
<meta content='' name='author'>
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="PZfcHJlhwRF4SMTlLODmWg4gv/d8eli2VqnZm1i/dnjyUhKjUkZXq+2jeMjfU/eYiArG5oU0Ur1VG6GLBYik6Q==" />
<link rel="stylesheet" media="screen" href="/assets/rails_bootstrap_forms-85a44da0cf14906976bde10ea0a42bbc.css?body=1" />
<link rel="stylesheet" media="screen" href="/assets/application-7b065b027fe33201010948bc34f4a7db.css?body=1" />
<link rel="stylesheet" media="screen" href="/assets/font-awesome.min-c657d02924cca8259559612983a6a227.css?body=1" />
<link rel="stylesheet" media="screen" href="/assets/modern-business-788410311885bd8eb9a8a947b93e1c6f.css?body=1" />
<script src="/assets/bootstrap-f069863cd7c15927c7faef4bba9fc907.js?body=1"></script>
<script src="/assets/bootstrap.min-759065b3d223bc01ce2f7ad79e06c909.js?body=1"></script>
<script src="/assets/contact_me-55e60d5e2f601e0adf79fc9dea175bf3.js?body=1"></script>
<script src="/assets/jqBootstrapValidation-d5764d00e4f4b8d79882008d22d482fa.js?body=1"></script>
<script src="/assets/jquery-89fdfdd2b961da1c1dac57e8beeff312.js?body=1"></script>
<script src="/assets/application-467c055a5b9b03c420678f7bae6bd21f.js?body=1"></script>
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>  <![endif]-->
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>

<nav class='navbar navbar-inverse navbar-fixed-top' role='navigation'>
  <div class='container'>
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class='navbar-header'>
      <button class='navbar-toggle' data-target='#bs-example-navbar-collapse-1' data-toggle='collapse' type='button'>
        <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='/'>Brand</a>
    </div>
  <div class='collapse navbar-collapse' id='bs-example-navbar-collapse-1'>
  <ul class='nav navbar-nav navbar-right'>
    <li><a href='/about.html'>About</a></li>
    <li><a href='/services.html'>Services</a></li>
    <li><a href='/contact.html'>Contact</a></li>
    <li class='dropdown'>
      <a class='dropdown-toggle' data-toggle='dropdown' href='#'>
        Portfolio
        <b class='caret'></b></a>
          <ul class='dropdown-menu'>
            <li>
              <a href='/this.html'>This</a>
            </li>
            <li>
              <a href='/that.html'>That</a>
            </li>
            <li>
              <a href='/other.html'>The other</a>
            </li>
          </ul>
        </li>
        <li class='dropdown'>
          <a class='dropdown-toggle' data-toggle='dropdown' href='#'>
            Blog
            <b class='caret'></b>
          </a>
          <ul class='dropdown-menu'>
            <li>
              <a href='/bikes.html'>Bikes</a>
            </li>
            <li>
              <a href='/planes.html'>Planes</a>
            </li>
            <li>
              <a href='/trains.html'>Trains</a>
            </li>
          </ul>
        </li>
        <li class='dropdown'>
          <a class='dropdown-toggle' data-toggle='dropdown' href='#'>
            Other Pages
            <b class='caret'></b>
          </a>
          <ul class='dropdown-menu'>
            <li>
              <a href='/candy.html'>Candy</a>
            </li>
            <li>
              <a href='/fruit.html'>Fruit</a>
            </li>
            <li>
              <a href='/lost.html'>Lost</a>
            </li>
            <li>
              <a href='/found.html'>Found</a>
            </li>
            <li>
              <a href='/haircuts.html'>Hair Cuts</a>
            </li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>

在检查元素时,我发现了一个错误...... TypeError: undefined is not an object (evaluating '$(target).offset().top')指向jquery.js文件的这一部分。

//smooth scroll
$('.navbar-nav > li').click(function(event) {
    event.preventDefault();
    var target = $(this).find('>a').prop('hash');
    $('html, body').animate({
        scrollTop: $(target).offset().top // this line here
    }, 500);
});

但是,当我查看jquery文档(http://api.jquery.com/event.preventdefault/)时,它说,&#34; 如果调用此方法,则不会触发事件的默认操作。&#34 ;.所以似乎可能是这种情况,但我不确定如何绕过它。

9 个答案:

答案 0 :(得分:2)

我遇到了由Javascript引起的同样问题。只需给链接一个ID,OnClick功能就可以顺利导航。

HTML:

<div class="navbar-collapse collapse " id="templatemo-nav-bar">
    <ul class="nav navbar-nav navbar-right" style="margin-top: 40px;">
        <li class="active"><a href="index.htm">HOME</a></li>
        <li><a  id="aboutus">ABOUT US</a></li>
        <li><a id="clients">OUR CLIENTS</a></li>
        <li><a id="products">PRODUCTS</a></li>
        <li><a id="contact">CONTACT</a></li>
    </ul>
</div><!--/.nav-collapse -->

JS:

document.getElementById("aboutus").onclick = function () {
    location.href = "aboutus.html";
};

答案 1 :(得分:2)

要使外部链接(所有不是锚点的链接)在nav中工作,只需在<a>元素内添加值为“external”的class属性。 <a href="foo.html" class="external">Foo</a>。这有助于我使用jquery.nav.js。

答案 2 :(得分:1)

我不确定您的代码发生了什么,但如果您的链接附加了js事件处理程序,您可以尝试使用以下链接删除链接上的处理程序:

$(document).ready(function () {
    $("#bs-example-navbar-collapse-1").find("a:not(.dropdown-toggle)").off("click").off("mousedown");
});

<强>更新
尝试手动将用户发送到链接,但这不是正确的方法。您可以使用以下代码来验证是否有任何遮罩层隐藏链接(如果此时没有发生任何事情,也可能存在图层)。

$(document).ready(function () {
    $("#bs-example-navbar-collapse-1").find("a:not(.dropdown-toggle)").on("click", function (e) {
         e.preventDefault();
         window.location = $(this).attr("href");
    });
});

更新2
问题在于你的顺利滚动。您的链接中没有哈希属性 将您的代码更改为:

$('.navbar-nav > li').click(function(event) {
    if($(this).parent().parent().is("#bs-example-navbar-collapse-1")) return;
    event.preventDefault();
    var target = $(this).find('>a').prop('hash');
    $('html, body').animate({
        scrollTop: $(target).offset().top // this line here
    }, 500);
});

答案 3 :(得分:0)

我有同样的问题,并将链接扩展名更改为htm而不是html修复它。奇怪从来没有发生过这种情况吗?

答案 4 :(得分:0)

在我的情况下,问题是由Javascript函数引起的,该函数旨在检测页面上任何位置的点击,但在特定菜单div之外,以便关闭它。

取而代之:

$(this).click(function () {
    if ($('#accountMenu').is(':visible')) {
        $('#accountMenu').hide();
    }
});

$(document).mouseup(function (e) {
    var container = $("#accountMenu");

    if (!container.is(e.target) // if the target of the click isn't the container...
        && container.has(e.target).length === 0) // ... nor a descendant of the container
    {
        container.hide();
    }
});

帮我解决了这个问题。

需要的第二个修复是处理打开菜单的功能。违规行是:

return false;

一旦我完全取消了退货,它再次正常工作。

答案 5 :(得分:0)

我不知道它是否有帮助,但当我把overflow-x:隐藏在html elemenet上时,我遇到了同样的问题。

当刚刚在身体元素上工作时,我正在尝试,因为我有一些奇怪的溢出。

所以,当我删除了在html元素上放置overflow-x实际上就像你说的那样发生了同样的问题,悬停并且一切正常但链接实际上没有。

答案 6 :(得分:0)

在我的情况下,问题是由于我必须在第二个.js克隆文件中删除的平滑滚动Javascript函数引起的,该文件调用我的特定情况而不是主要情况(我会尝试理解何时我和#39;我有时间):

//smooth scroll
    $('.navbar-nav > li').click(function (event) {
        event.preventDefault();
        var target = $(this).find('>a').prop('hash');
        $('html, body').animate({
            scrollTop: $(target).offset().top
        }, 500);
    });

希望这有助于匆忙。

答案 7 :(得分:0)

我的锚链接在我的bootstrap导航栏中没有工作时遇到了同样的问题,在阅读了这里的答案之后,它就是导致问题的平滑滚动。底部的脚本......

  // Add smooth scrolling to all links in navbar + footer link
  $(".navbar a[href='#paintings'], a[href='#digitalart'], a[href='#advertisements'], a[href='#packaging'], a[href='#layout'], a[href='#logos'], a[href='#apparel'], a[href='#animation'], a[href='#videoproduction'], a[href='#frontend'], a[href='#landingpages'], a[href='#emailmarketing'], footer a[href='#PageTop'], a[href='#Back2Top']").on('click', function(event) {

...我一直使用ID标签,但是必须将每个哈希#name添加到底部的脚本中,然后一切正常!

答案 8 :(得分:0)

我添加了class =“external nav”,这允许我的链接在导航栏中工作。