1

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

a.setAttribute("onclick", "return false;");

初始化行上的点击事件后。但是使用 addEventListener 来实现相同的效果似乎更优雅

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

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

4

2 回答 2

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

这应该符合您的需求。

于 2009-09-09T21:43:38.927 回答
1

a.setAttribute("onclick", "return false;");

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

a.onclick= function() {
    return false;
};

addEventListener 如果您按照 fphilipe 的建议使用 preventDefault() 就可以了,但是对于不支持 DOM 事件的 IE,您需要一个 attachEvent 备份。这对于仅仅试图禁用链接来说可能是矫枉过正。

就个人而言,要禁用链接,我希望完全摆脱它,这样它就不再可用于在新窗口中打开或书签链接等操作,并且它不参与键盘跳格顺序。

所以你可以 removeChild() 它,或者用具有相同文本的 span 替换它,或者将文本踢出链接:

while (a.firstChild)
    a.parentNode.insertBefore(a.firstChild, a);
a.parentNode.removeChild(a);
于 2009-09-10T00:56:46.807 回答