【问题标题】:Disabled href tag禁用href标签
【发布时间】:2012-12-06 23:58:30
【问题描述】:

虽然该链接已禁用,但仍可点击。

<a href="/" disabled="disabled">123n</a>

如果它被禁用,我可以让它不可点击吗?我必须使用 JavaScript 吗?

【问题讨论】:

标签: javascript html


【解决方案1】:

在 css 的帮助下,您将禁用超链接。试试下面的

a.disabled {
  pointer-events: none;
  cursor: default;
}
&lt;a href="link.html" class="disabled"&gt;Link&lt;/a&gt;

【讨论】:

  • 请注意,这只适用于 Internet Explorer 11+
  • 当使用 Tab 键关注链接标签并按 Enter 时,此属性不起作用。
  • 只有在不关心 IE9-10 的情况下才应该是答案
  • 还使用不透明度来区分活动链接和禁用链接。 opacity: 0.5;
  • @MajidBasirati 我知道这是一篇旧帖子,但我想为标签问题提供一个简单的解决方案。您始终可以在锚标记中使用tabindex="-1" 来禁用它。
【解决方案2】:

超链接没有禁用属性。如果您不想链接某些内容,则需要完全删除 &lt;a&gt; 标记。

或者,您可以删除其href 属性 - 尽管这有其他 UX 和可访问性问题,如下面的 cmets 中所述,因此不推荐。

【讨论】:

  • 这行得通,但如果你把现有的 CSS 留在上面,我会认为它是糟糕的用户体验。用户会点击它并认为有些东西坏了。永远不要让用户对正在发生的事情感到困惑。
  • 只添加光标:无;到相关链接的实现似乎和 cursor: none 一样多;指针事件:无; . . . .无论如何,它为我启用了单页应用程序站点中的页面更改。
  • 即使您使用 CSS 光标或指针事件,链接仍然可以使用键盘导航获得焦点和“可点击”(使用 Enter),如果您尝试禁用某些东西,这可能很糟糕要么删除href 属性或将其转换为跨度
  • 您还可以将onclick="return false;" 添加到锚标记中,或者添加一个title 属性来说明链接无效。
  • 另外,我相信简单地清除 href 并留下 &lt;a&gt; 将不符合 ADA。
【解决方案3】:

你可以使用:

<a href="/" onclick="return false;">123n</a>

【讨论】:

【解决方案4】:

您可以使用以下解决方案之一:

HTML

<a>link</a>

JavaScript

<a href="javascript:function() { return false; }">link</a>
<a href="/" onclick="return false;">link</a>

CSS

<a href="www.page.com" disabled="disabled">link</a>

<style type="text/css">
    a[disabled="disabled"] {
        pointer-events: none;
    }
</style>

【讨论】:

    【解决方案5】:

    试试这个:

    <a href="javascript:void(0)" style="cursor: default;">123n</a>
    

    【讨论】:

    • 正确,我总是使用 href="javascript:void(0)"
    • 这个也不错,如果你还想保留“复制链接”之类的右键功能
    【解决方案6】:

    &lt;a&gt; tag 没有disabled 属性,它仅适用于&lt;input&gt;s(以及&lt;select&gt;s 和&lt;textarea&gt;s)。

    要“禁用”链接,您可以删除其 href 属性,或添加返回 false 的点击处理程序。

    【讨论】:

    • @rocket 删除 href 属性有什么影响吗?我的意思是,它应该是一个强制属性。如今,这种事情似乎并不重要。
    • @Ringo:删除href 可能会使光标在您悬停在它上面时不会改变。
    【解决方案7】:

    HTML:

    <a href="/" class="btn-disabled" disabled="disabled">123n</a>
    

    CSS:

    .btn-disabled,
    .btn-disabled[disabled] {
      opacity: .4;
      cursor: default !important;
      pointer-events: none;
    }
    

    【讨论】:

    • 这可能最适合引导
    【解决方案8】:

    提示 1:使用 CSS pointer-events: none;

    提示 2:使用 JavaScript javascript:void(0) (这是最佳做法)

    <a href="javascript:void(0)"></a>
    

    提示1:使用Jquery $('selector').attr("disabled","disabled");

    【讨论】:

      【解决方案9】:

      您需要删除&lt;a&gt; 标签才能摆脱这种情况。

      或尝试使用:-

        <a href="/" onclick="return false;">123n</a>
      

      【讨论】:

        【解决方案10】:

        仅限 CSS:这会从 href 中删除链接。

        .disable { 
            pointer-events: none; 
            cursor: default; 
        }
        

        【讨论】:

        • 这不会阻止用户使用键盘选择链接。
        【解决方案11】:

        让父级拥有pointer-events: none 将像这样禁用子级a-tag(要求 div 覆盖 a 并且宽度/高度不为 0):

        <div class="disabled">
           <a href="/"></a>
        </div>
        

        地点:

        .disabled {
            pointer-events: none;
        }
        

        【讨论】:

        【解决方案12】:
        $(document).ready(function() {
           $('a').click(function(e) {
             e.preventDefault();
          });
        });
        

        【讨论】:

        • 此代码正在右键单击。因此,它不是一个精确的解决方案。
        【解决方案13】:

        您可以在 &lt;a&gt; 标记上模拟 disabled 属性。

        &lt;a href="link.html" disabled=""&gt;Link&lt;/a&gt;

        a[disabled] {
           pointer-events: none;
           cursor: default;
        }
        

        【讨论】:

          【解决方案14】:

          您可以使用此代码在运行时禁用使用 javascript 的链接

          $('.page-link').css("pointer-events", "none");

          【讨论】:

          • 派对迟到了,但这也会删除任何光标 css。就我而言,如果链接被禁用,我会使用“光标:不允许”。
          【解决方案15】:

          我有一个:

          <a href="#">This is a disabled tag.</a>
          

          希望对你有所帮助;)

          【讨论】:

          • 嗨 Werenverlivitz,欢迎您。很好,没想到你会在 7-8 年后成为第一个给出这样答案的人!
          【解决方案16】:

          如果你想摆脱指针,你可以使用 cursor 使用 css 来做到这一点。

          【讨论】:

            【解决方案17】:

            就我而言,我使用

            <a href="/" onClick={e => e.preventDefault()}>
            

            【讨论】:

              【解决方案18】:

              试试这个

                <a href="javascript:void(0)">Click Hare</a>
              

              【讨论】:

                【解决方案19】:

                我们不能直接禁用它,但我们可以执行以下操作:

                1. 添加type="button"
                2. 删除href="" 属性。
                3. 添加disabled 属性,以便通过更改光标来显示它已被禁用并变暗。

                PHP 中的示例:

                <?php
                if($status=="Approved"){ 
                ?>
                  <a type="button" class="btn btn-primary btn-xs" disabled> EDIT
                     </a>
                  <?php    
                }else{
                ?>
                  <a href="index.php" class="btn btn-primary btn-xs"> EDIT
                    </a>
                  <?php    
                }
                ?>
                

                【讨论】:

                • type属性是MIME类型,没有“button”类型,见HTML <a> type Attribute。同样 disabled 不是&lt;a&gt;的属性
                【解决方案20】:

                您可以使用 CSS 禁用链接

                pointer-events: none
                

                Refrence: code with hugo

                【讨论】:

                  【解决方案21】:

                  我能够使用 ng-href 三元运算达到预期的结果

                  <a ng-href="{{[condition] ? '' : '/'}}" ng-class="{'is-disabled':[condition]}">123n</a>
                  

                  在哪里

                  a.is-disabled{
                     color: grey;
                     cursor: default;
                  
                     &:hover {
                        text-decoration: none;
                     }
                  } 
                  

                  【讨论】:

                    【解决方案22】:

                    最好的答案总是最简单的。无需任何编码。

                    如果 (a) 锚标记没有 href 属性,则它只是超链接的占位符。所有浏览器都支持!

                    <a href="/">free web counters</a><br  />
                    <a "/">free web counters</a>

                    【讨论】:

                      【解决方案23】:

                      正确使用按钮和链接。

                      • 按钮可激活网页上的脚本功能(对话框、展开/折叠区域)。

                      • 链接将您带到另一个位置,可以是不同的页面,也可以是同一页面上的不同位置。

                      如果您遵循这些规则,则不会出现需要禁用链接的情况。即使您使链接看起来在视觉上被禁用并且单击时为空白

                      &lt;a href="" ng-click="Ctrl._isLinkActive &amp;&amp; $ctrl.gotoMyAwesomePage()"

                      您不会考虑可访问性,屏幕阅读器会将其作为链接阅读,视障人士会一直想知道为什么链接不起作用。

                      【讨论】:

                        【解决方案24】:

                        如果您使用的是 WordPress,我创建了一个插件,无需知道如何编写任何代码,即可完成此任务以及更多其他任务。您需要做的就是添加要禁用的链接的选择器,然后选择“在新选项卡中使用此选择器禁用所有链接”。从出现的下拉菜单中点击更新。

                        Click here to view a gif that demonstrates this

                        你可以get the free version from the WordPress.org Plugin repository试试看。

                        【讨论】:

                          【解决方案25】:

                          以下是禁用 a 标签的多种方法:

                          <a >Link Text</a> remove the href from your anchor tag
                          <a href=”javascript:void(0)”/>Link text</a> put javascript:void(0) in href
                          <a href="/" onclick="return false;">Link text</a> using return false
                          

                          由于锚标记没有禁用属性。 如果您想停止 jQuery 函数内的锚标记行为,则可以在函数开头使用以下行:

                          $( "a" ).click(function( e ) {
                          e.preventDefault();
                          $( "<div>" )
                          .append( "default " + e.type + " prevented" )
                          .appendTo( "#log" );
                          });
                          

                          event.preventDefault()

                          【讨论】:

                            【解决方案26】:

                            我看到这里已经发布了大量答案,但我认为还没有一个明确的答案可以将已经提到的方法结合到我发现可行的方法中。这是为了使链接既显示为禁用,又不将用户重定向到另一个页面。

                            此答案假定您正在使用 jquerybootstrap,并在禁用时使用另一个属性临时存储 href 属性。

                            //situation where link enable/disable should be toggled
                            function toggle_links(enable) {
                                if (enable) {
                                    $('.toggle-link')
                                    .removeClass('disabled')
                                    .prop('href', $(this).attr('data-href'))
                                }
                                else {
                                    $('.toggle-link')
                                    .addClass('disabled')
                                    .prop('data-href', $(this).prop('href'))
                                    .prop('href','#')
                                }
                            
                            a.disabled {
                              cursor: default;
                            }
                            

                            【讨论】:

                              【解决方案27】:

                              如果您需要使用 Javascript 禁用 laravel 上的链接,这是我的解决方案:

                              链接(blade.php):

                              <a href='/link/to/path' class='btn btn-primary mt-3' onclick='disableLink(this)'>Confirmar</a>
                              

                              .css 文件

                              .isDisabled {
                                  cursor: not-allowed;
                                  opacity: 0.5;
                              }
                              
                              a[aria-disabled="true"] {
                                  color: currentColor;
                                  display: inline-block; /* For IE11/ MS Edge bug */
                                  pointer-events: none;
                                  text-decoration: none;
                              }
                              

                              .js 文件

                              function disableLink(link) {
                                  // 1. Add isDisabled class to parent element
                                  link.parentElement.classList.add('isDisabled');
                                  // 2. Store href so we can add it later
                                  link.setAttribute('data-href', link.href);
                                  // 3. Set aria-disabled to 'true'
                                  link.setAttribute('aria-disabled', 'true');
                              }
                              
                              function enableLink(link) {
                                  // 1. Remove 'isDisabled' class from parent span
                                  link.parentElement.classList.remove('isDisabled');
                                  // 2. Set href
                                  link.href = link.getAttribute('data-href');
                                  // 3. Remove 'aria-disabled', better than setting to false
                                  link.removeAttribute('aria-disabled');
                              }
                              

                              参考:https://css-tricks.com/how-to-disable-links/

                              【讨论】:

                                【解决方案28】:

                                href 标记中的任何内容都将在您将鼠标悬停在浏览器窗口的左下方显示。

                                我个人认为向用户显示像 javascript:void(0) 这样的东西是可怕的。

                                相反,请关闭 href,使用 jQuery/其他任何东西来发挥你的作用,并添加一个样式规则(如果你仍然需要它看起来像一个链接):

                                a {
                                    cursor:pointer;
                                }
                                

                                【讨论】:

                                  【解决方案29】:

                                  您可以通过返回 false 来禁用锚标记。在我的情况下,我对 Jquery 手风琴使用 angular 和 ng-disabled,我需要禁用这些部分。

                                  所以我创建了一个小 js sn-p 来解决这个问题。

                                         <a class="opener" data-toggle="collapse"
                                                     data-parent="#shipping-detail"
                                                     id="shipping-detail-section"
                                                     href="#shipping-address"
                                                     aria-expanded="true"
                                                     ng-disabled="checkoutState.addressSec">
                                                     Shipping Address</a>
                                       <script>
                                            $("a.opener").on("click", function () {
                                             var disabled = $(this).attr("disabled");
                                             if (disabled === 'disabled') {
                                              return false;
                                             }
                                             });
                                       </script>
                                  

                                  【讨论】:

                                    【解决方案30】:

                                    如果您只是想暂时禁用链接但将 href 留在那里以便稍后启用(这是我想要做的),我发现所有浏览器都使用第一个 href。因此我能够做到:

                                    <a class="ea-link" href="javascript:void(0)" href="/export/">Export</a>
                                    

                                    【讨论】:

                                    • 这是无效的 HTML,如 stackoverflow.com/q/26341507/1709587 所述。如果您的动机只是将 href 保留在源代码中,以便以后可以轻松地编辑源代码以恢复它,那么有一些方法可以做到这一点,而不会违反规范,例如使用注释。我建议不要在没有充分理由的情况下编写这样的无效 HTML。
                                    猜你喜欢
                                    相关资源
                                    最近更新 更多
                                    热门标签