如何禁用JavaScript中的href链接?

War*_*ior 105 html javascript

我有一个标签<a href="#"> Previous </a> 1 2 3 4 <a href="#"> Next </a>,在某些情况下我希望这个标签被完全禁用.

来自评论的代码(这是链接的生成方式)

if (n_index != n_pages) 
    a = a+'<li><a href="#" onclick="javascript:paginateAjaxPage('+(n_index+1) +','+stype+');">></a></li><li><a href="#" onclick="javascript:paginateAjaxPage('+n_pages+','+stype+');" >>></a></li>'; 
else 
    a = a+'<li><a style="cursor: pointer;" onclick="return false;">></a></li><li><a style="cursor: pointer;" onclick="return false" >>></a></li>'; 
a = a+'</ul></div>';
Run Code Online (Sandbox Code Playgroud)

Pra*_*ana 179

当您不希望用户重定向点击时尝试此操作

<a href="javascript: void(0)">I am a useless link</a>
Run Code Online (Sandbox Code Playgroud)

  • 怎么样`<a href='javascript:;'>我是一个较短的无用链接</a>`? (54认同)
  • 你的网页开发人员把数以百万计的标签`\ t`,换行符`\n`和空格只看到代码折叠和好看(对于谁?浏览器),现在担心7字节`void(0)`和/或一个```,上帝. (37认同)
  • 甚至不需要分号. (16认同)
  • 我略微不同意上述评论.有时,事物需要具有描述性,而在其他情况下则要简单易记.我更喜欢"javascript:". (3认同)
  • 在我看来-数以百万计的制表符\ t,换行符\ n和空格-是的,这使代码易于理解,而`void(0)则不是。这就是为什么应删除它或使其尽可能短的原因。例如,此处较短-用于理解(阅读),而不是用于“压缩”或字节格式。:) (2认同)

Piz*_*ola 68

您可以使用此样式类停用页面中的所有链接:

a {
    pointer-events:none;
}
Run Code Online (Sandbox Code Playgroud)

现在当然诀窍是只在你需要时停用链接,这是怎么做的:

使用一个空的A类,如下所示:

a {}
Run Code Online (Sandbox Code Playgroud)

然后,当您要停用链接时,请执行以下操作:

    GetStyleClass('a').pointerEvents = "none"

    function GetStyleClass(className)
    {
       for (var i=0; i< document.styleSheets.length; i++) {
          var styleSheet = document.styleSheets[i]

          var rules = styleSheet.cssRules || styleSheet.rules

          for (var j=0; j<rules.length; j++) {
             var rule = rules[j]

             if (rule.selectorText === className) {
                return(rule.style)
             }
          }
       }

       return 0
    }
Run Code Online (Sandbox Code Playgroud)

注意:CSS规则名称在某些浏览器中转换为小写,并且此代码区分大小写,因此最好使用小写类名称

重新激活链接:

GetStyleClass('a').pointerEvents = ""
Run Code Online (Sandbox Code Playgroud)

有关浏览器兼容性的信息,请查看此页面http://caniuse.com/pointer-events

我认为这是最好的方法,但遗憾的是IE,像往常一样,不会允许它:)我无论如何发布这个,因为我认为这包含可能有用的信息,并且因为一些项目使用了解浏览器就像在移动设备上使用Web视图一样.

如果你只想停用一个链接(我只是意识到这就是问题),我会使用一个函数,根据这个条件manualy设置当前页面的url.(就像你接受的解决方案)

这个问题比我想象的要容易得多:)

  • 这太棒了,但值得注意的是,在版本11之前的IE中不支持指针事件.http://caniuse.com/#feat=pointer-events (3认同)
  • 一定要感谢你的`指针 - 事件:无;`我从来不知道那个标签,非常方便! (2认同)
  • 我通过编辑全局样式在此页面上进行了尝试,但后来我无法投票给您 :) (2认同)

tco*_*ooc 16

你可以简单地给它一个空哈希:

anchor.href = "#";
Run Code Online (Sandbox Code Playgroud)

或者,如果"禁用"不够好,请使用事件处理程序:

anchor.href = "javascript:void(0)";
Run Code Online (Sandbox Code Playgroud)

  • #不推荐,为什么?考虑到这一点,你的禁用链接出现在一个冗长的页面的底部/页脚,单击该链接将带你到顶部,"javascript:;" 足够 (21认同)
  • #1不会滚动回到顶部 (3认同)
  • @Bixi,如果稍后添加,它将滚动到id为1的元素. (3认同)

Val*_*ean 8

使用jQuery试试这个:

$(function () {
    $('a.something').on("click", function (e) {
        e.preventDefault();
    });
});
Run Code Online (Sandbox Code Playgroud)


小智 6

element.removeAttribute(attrName);当您想禁用它时,MDN 建议将属性设置为 null(或其他值)。在这种情况下,它将是element.removeAttribute("href");

https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute


小智 5

anchor.href = null;
Run Code Online (Sandbox Code Playgroud)

  • chrome 现在尝试导航到此答案的名为 null 的页面 (4认同)

use*_*549 5

(function ($) {
    $( window ).load(function() {
        $('.navbar a').unbind('click');
        $('.navbar a').click(function () {
            //DO SOMETHING
            return false;
        });
    });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我发现这种方式更容易实现。而且它的优点是您可以使用js。不在您的html内,而是在另一个文件中。我认为没有绑定。这两个事件仍处于活动状态。不确定。但从某种意义上讲,您只需要这一事件


ins*_*ign 5

根据许多答案和我的经验,我的最佳解决方案:

<a href="javascript:">I am a useless link</a>
Run Code Online (Sandbox Code Playgroud)

一些选项及其注意事项

<a href="#">I will make you page jump to top</a> 

<a href="#" onclick="DoSomething(); return false;">I'll break others scripts events</a>

<a href="javascript: openPage()" >Please... I should be an onclick event...</a>

<a href="javascript:" onclick="openPage()" >Please...do I even need to be an anchor?</a>

<script>element.removeAttribute("href") // some browsers will remove link style</script>

<script>element.href = null // some browsers will remove link style</script>

<style>
 a.my-off-class {
    pointer-events: none
 }
 /** I disable hover event too. And... Is this a style responsability?
</style>
Run Code Online (Sandbox Code Playgroud)


Hol*_*ger 5

使用以下所有三个:Event.preventDefault();Event.stopPropagation();return false;。各自解释...

Event 接口的 PreventDefault() 方法告诉用户代理,如果事件没有得到显式处理,则不应像通常那样采取其默认操作。(来源:MDN 网络文档。)

  • Event.stopPropagation();:阻止事件单击包含父级 DOM 中的链接(即,如果两个链接在 UI 中视觉上重叠)。

Event 接口的 stopPropagation() 方法可防止当前事件在捕获和冒泡阶段进一步传播。(来源:MDN 网络文档。)

  • return false;:向onevent处理程序表明我们正在取消链接单击行为。

处理程序的返回值确定事件是否被取消。(来源:MDN 网络文档。)

完整工作 JSBin 演示。

StackOverflow 演示...

document.getElementById('my-link').addEventListener('click', function(e) {
  console.log('Click happened for: ' + e.target.id);
  e.preventDefault();
  e.stopPropagation();
  return false;
});
Run Code Online (Sandbox Code Playgroud)
<a href="https://www.wikipedia.com/" id="my-link" target="_blank">Link</a>
Run Code Online (Sandbox Code Playgroud)