【问题标题】:How to disable all <a> links using javascript in Firefox and Chrome如何在 Firefox 和 Chrome 中使用 javascript 禁用所有 <a> 链接
【发布时间】:2011-12-21 14:26:01
【问题描述】:

我想禁用我页面中的所有 href 链接。我正在使用下面的代码,它只在 IE 中运行良好。

var elems = document.getElementsByTagName("*");
    var len = elems.length;
    for (i=0; i<len; i++) {
           if(elems[i].tagName.toLowerCase() == 'a'){
               elems[i].disabled = true;           
           }
       }

但我想在所有浏览器上工作。 有人可以帮我解决这个问题。

提前致谢。

【问题讨论】:

    标签: javascript firefox google-chrome cross-browser


    【解决方案1】:

    如果您不想更改链接的 href,也可以这样做:

    window.onload = function() {
        var anchors = document.getElementsByTagName("a");
        for (var i = 0; i < anchors.length; i++) {
            anchors[i].onclick = function() {return false;};
        }
    };
    

    这里的工作演示:http://jsfiddle.net/jfriend00/9YkJQ/

    【讨论】:

    • return 不是函数。这些括号不是必需的。
    • 我想补充一下,根据ECMAScript标准,return(false)是不允许的:ecma-international.org/ecma-262/5.1/#sec-12.9这不是个人喜好问题,不正确。但是,我不认为任何浏览器都存在这种表示法的问题。
    • 至少你认为我的理解不正确。老实说,我不确定这一点。但我认为我是对的。当然,表达式中总是允许使用括号。因此 return (true) 和 return ((((true)))) 一样好。但是因为 (true) 可以用 true 代替,所以我很确定 return 之类的保留字及其表达式必须用一个或多个空格分隔。否则 returntrue 也将被允许。
    • 我所知道的是,Chrome 表示在我将“return”更改为“preventDefault”之前它不会工作(我保持其他所有内容不变并且它工作)。
    【解决方案2】:

    这是一个非常古老的线程,但以防万一其他人访问此页面,可以使用以下方法设置 disabled 属性:

    element.setAttribute('disabled', 'disabled');
    

    这在所有浏览器中都可以识别,并将禁用链接。但是,在不同的浏览器和版本中,禁用链接上的触发事件的处理方式不同。 FF 和 Chrome 仍将触发 onclick 事件,其中 IE8+(不在兼容模式下)不会触发事件。如果没有连接到锚点的 onclick 事件处理程序,则不需要这样做,一旦设置了 disabled 属性,普通的 href 将不会触发。为了停止点击事件的触发,上面的代码可以工作。括号不是必需的,就个人而言,我在这种情况下不使用它们,因为我假设括号用于分组或函数。在之前提供的解决方案中似乎没有必要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 2015-03-04
      • 2021-12-28
      • 2018-10-08
      • 2012-10-28
      • 1970-01-01
      相关资源
      最近更新 更多