使用DOM click事件停用链接

时间:2009-09-09 21:40:11

标签: html dom javascript-events href

这个问题主要是出于好奇(我对这个问题有不同的解决方案)。 尝试做一些基本的渐进增强:一个表应该可以使每个行都可以使用JavaScript转到另一个页面。对于没有JavaScript的人来说,每行的第一列都有一个链接。如果启用了JavaScript,则应禁用链接。其中一个简单的方法之一是

a.setAttribute("onclick", "return false;");
初始化行上的单击事件后

。但是使用addEventListener来实现相同的

似乎更优雅
a.addEventListener("click", function() { return false; }, false);

然而,后者不起作用。我相信这样做的原因是可以通过这种方式添加多个事件监听器,如果它们返回不同的真值,结果将是模糊的。这个假设是正确的还是我弄错了?请解释一下这背后的内部运作。

2 个答案:

答案 0 :(得分:2)

a.addEventListener("click", function(event) { event.preventDefault(); return false; }, false);

这应该符合您的需求。

答案 1 :(得分:1)

  

a.setAttribute(“onclick”,“return false;”);

避免使用setAttribute,您永远不需要它来处理HTML文档,并且存在浏览器问题(特别是对于IE,尤其是事件处理程序)。而是使用直接DOM HTML属性:

a.onclick= function() {
    return false;
};
如果您使用fphilipe建议的preventDefault(),则可以使用addEventListener,但是对于不支持DOM事件的IE,您需要一个attachEvent备份。仅仅尝试禁用链接可能会有点过分。

个人禁用链接我宁愿完全摆脱它,因此它不再适用于打开新窗口或书签链接等操作,并且它不会参与键盘标签顺序。

所以你可以删除它,或者用一个带有相同文本的span替换它,或者将文本踢出链接:

while (a.firstChild)
    a.parentNode.insertBefore(a.firstChild, a);
a.parentNode.removeChild(a);