【问题标题】:How to make a .nav-link inactive?如何使 .nav-link 无效?
【发布时间】:2013-03-26 22:08:37
【问题描述】:

我正在使用 Bootstrap nav-bar 作为向导进度指示器。我想确保尚未访问的向导步骤不可点击。我希望它们出现在nav-bar 中,但让它们变灰并禁用链接。

这可以在 Bootstrap nav-bar 中完成吗?

【问题讨论】:

标签: twitter-bootstrap


【解决方案1】:

您可以将disabled 类添加到容器<li>

<ul class="nav nav-list">
   <li class="disabled"><a href="index.html">...</a></li>
</ul>

但是,要禁止用户点击它们,您应该使用 JavaScript 来防止这种情况:

$(document).ready(function() {
   $(".nav li.disabled a").click(function() {
     return false;
   });
});

另一种方法是用锚点 (#) 临时替换 href 属性。

【讨论】:

  • 在将引导程序与某些框架(例如淘汰赛)结合使用时,点击绑定可能会使用上述方式持续存在。使用 .unbind("click"); 代替了我的技巧,以防止点击数据绑定。
  • 感谢您的提示,@ılǝ 对于其他想知道 .unbind('click') 来自哪个库的人,那就是 jquery
  • 想知道为什么不接受这作为答案,因为接受的答案会要求用户使用 JavaScript,而这里根本不需要它
【解决方案2】:

正确的做法是使用不带href 属性的&lt;a&gt;nchor 标签。

虽然这是一种鲜为人知的技术,但它是完全有效的 HTML,并导致元素具有归因于 &lt;a&gt; 标记的所有样式,但没有链接功能。

<ul class="nav nav-list">
   <li><a>...</a></li>
</ul>

技术背景见W3C's HTML specification

如果a元素没有href属性,则该元素代表a 可能放置链接的位置的占位符,如果它 是相关的,只包含元素的内容。

【讨论】:

    【解决方案3】:

    这可以通过pointer-events 属性在CSS 中完全完成(除非您需要支持即a 的指针事件,我也不再获得不允许的光标,因此我将其设置为禁用的li。 (我知道这个问题很老但仍然是第一个搜索结果)

    这是我的 SCSS:

    ul.nav {
        li.disabled {
            cursor: not-allowed;
    
            a {
                pointer-events: none;
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      我想补充一点,仅添加禁用不会阻止导航。此外,答案 jquery 解决方案将起作用,但是如果您添加或删除禁用的类,它不会取消绑定处理程序。

      这可以通过将事件处理程序更改为使用 jquery 的 .on 方法来解决。

      $('body').on('click', '.disabled', function(e) {
          e.preventDefault();
          return false;
      });
      

      这会将处理程序附加到主体(确保将主体替换为您的容器)并通过禁用过滤。任何时候点击正文,如果点击的内容被禁用,它会阻止点击。

      查看http://api.jquery.com/on/ 了解更多信息。

      【讨论】:

      • 这是一个更好的禁用点击事件的方法,
      • 如果在页面头部定义,不要忘记将其包装在 $(function () {...}); 中。
      【解决方案5】:

      最简单的方法是将类从 nav-link 更改为 nav-link disabled

      像这样:

      <a class="nav-link disabled" href="#">
      

      【讨论】:

        【解决方案6】:

        要禁用导航链接,您需要同时禁用 li 和 a 标签。但这在使用剃刀语法时可能会有点棘手。将禁用的类添加到 li 工作正常,但它不会禁用 a 标签上的操作。因此,类似于 gustavohenke 解决方案,但有点精致,请在您的文档就绪功能中尝试这个。

        $(".nav li.disabled a").prop("disabled",true)

        【讨论】:

          【解决方案7】:

          在 href 中保留您的价值。您可以使用 onclick="return false;"切换锚标记。使用 bootstrap disabled css 类来灰显菜单项。

          var enableMyLink = false;
          
          if (enableMyLink) {
            $("li").removeClass("disabled").find("a").removeAttr("onclick");
          } else {
            $("li").addClass("disabled").find("a").attr("onclick", "return false;");
          }
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
          <li>
            <a href="http://sample.com/">My Link</a>
          </li>

          【讨论】:

            【解决方案8】:

            首先,你应该在 ul 中添加一个 id:

            <ul class="nav navbar-nav navbar-right" id="someId">
                        <li><a>Element</a></li>
            </ul>
            

            您可以隐藏ul,例如:

            $(document).find('ul#someId').hide();
            

            如果你愿意,你可以显示 ul:

            $(document).find('ul#someId').show();
            

            【讨论】:

            • OP 特别希望它是“非活动”或“禁用”,而不是“隐藏”!
            猜你喜欢
            • 1970-01-01
            • 2017-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多