Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用DOM单击事件停用链接_Javascript_Html_Dom_Dom Events_Href - Fatal编程技术网

Javascript 使用DOM单击事件停用链接

Javascript 使用DOM单击事件停用链接,javascript,html,dom,dom-events,href,Javascript,Html,Dom,Dom Events,Href,这个问题主要是出于好奇(我对这个问题有不同的工作解决方案)。 尝试做一些基本的渐进式增强:一个表的每一行都应该可以使用JavaScript点击到另一个页面。对于不使用JavaScript的人,每行的第一列中都有一个链接。如果启用了JavaScript,则应禁用链接。其中一个简单的方法是 a.setAttribute("onclick", "return false;"); 初始化行上的单击事件后。但使用addEventListener来实现同样的效果似乎更为优雅 a.addEventListe

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

a.setAttribute("onclick", "return false;");
初始化行上的单击事件后。但使用addEventListener来实现同样的效果似乎更为优雅

a.addEventListener("click", function() { return false; }, false);
然而,后者不起作用。我相信这样做的原因是,可以通过这种方式添加多个事件侦听器,如果它们返回不同的真值,结果将是不明确的。这个假设是正确的还是我做错了什么?请解释这背后的内部工作原理

a.addEventListener("click", function(event) { event.preventDefault(); return false; }, false);
这应该适合你的需要

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

避免使用setAttribute,在处理HTML文档时不应该使用它,而且存在浏览器问题(尤其是IE,尤其是事件处理程序)。而是使用直接DOM HTML属性:

a.onclick= function() {
    return false;
};
如果按照fphilipe的建议使用preventDefault(),则addEventListener是可以的,但在不支持DOM事件的IE中,需要attachEvent备份。如果只是尝试禁用链接,这可能会有点过头

就我个人而言,要禁用一个链接,我更愿意完全删除它,这样它就不再适用于像“在新窗口中打开”或“书签链接”这样的操作,而且它也不参与键盘的选项卡顺序

因此,您可以删除child(),或者用具有相同文本的span替换child,或者将文本从链接中踢出:

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

谢谢你的快速回答。明天早上我会试试这个(我住的地方已经很晚了),如果它有效的话,我会投票支持它。另一件小事:为什么必须同时使用preventdefault()和returnfalse?