问题 对于,javascript:void(0)或onclick =“return false” - 哪个更好?


有一个基于javascript的界面 - 所以我不需要支持没有JavaScript的工作。

我有一个

<a>Something</a>

带有JS代码的元素,它绑定了click事件 - 因此,我不想在用户点击后重新加载页面。

哪种方式更好?

1. <a href="javascript:void(0)">Something</a>
2. <a href="#" onclick="return false;">Something</a>

每种方法有哪些优缺点?


1566
2017-08-12 07:58


起源

也可以看看: stackoverflow.com/questions/134845/...  stackoverflow.com/questions/3451560/... - CMS
重复?看到: stackoverflow.com/questions/245868/... - Kai Sternad


答案:


两者都是糟糕的选择。演示文稿不应与内容混在一起。那意味着没有 javascript: URI,绝对没有 onclick 属性。

做到这一点的方法:

<a id="myLink">某些内容</a>
<SCRIPT>
    function myFunction(...){...}
    document.getElementById('myLink')。addEventListener('click',myFunction,false);
</ SCRIPT>

11
2017-08-12 08:00



一般来说,它是第二种方式 - 事件监听器。为简单起见,我写了onclick =“...”。我使用JQuery - 所以$(“#elementId”)。bind(“click”,function(){return false;});谢谢。 - Sir Hally
你是对的,两者都是糟糕的选择,但这更糟糕:它在IE中不起作用。这是怎么回事? <script> 紧接着之后的元素 <a> 实际上从关注点分离的角度来改进事物? - Tim Down
叹。我没有深入研究IE-is-bad-so-I-not-to-to-support-it问题。我将限制自己指出用户选择使用哪种浏览器,而不是你的浏览器,大多数用户既不知道也不关心他们使用哪种浏览器。有些根本无法切换。这个案子甚至没有争议: addEventListener 甚至不能在当前版本的IE(8)中工作,这意味着你的代码在50%的人的浏览器中不起作用。您真的想要排除50%的人使用您的网站吗? - Tim Down
好的,那是你的选择。但是,假设提出原始问题的人会关注IE,这是公平的。 - Tim Down
另一个缺点:这将导致链接不像其他链接那样被设置样式,例如默认情况下它不会加下划线,因为 href 属性缺失。 - Matt Browne


都不是。如果你的链接没有去任何地方,请不要使用 <a> 元件。用一个 <span> 或者其他合适的东西,并根据需要添加CSS来设置样式。


2
2017-08-12 19:41



实际上,一个 <a> 元素更好,因为它在语义上更正确。除非一切都是可点击的,就像一个完整的网络应用程序,一个 <a> 元素将更可能被视为可点击而不是 <span>。 - Delan Azabani
如果它不是作为链接或锚点,为什么它在语义上更正确? - Tim Down
因为一个 <span> 不是语义上的 什么。一个 <a> 当你点击它时,它会更近一点,即使它不是一个链接。但是,正如我之前所说,如果我正在编写一个完整的独立webapp,那么这些语义差异可能不那么重要,我只会坚持使用其中一个;大概 <span>。 - Delan Azabani
是的,我理解 <span> 没有传达语义。但是,因为问题是询问 <a> 元素 onclick="return false;",我认为OP希望链接完全没有做任何事情,使其作为一个链接完全没有意义。重读这个问题,我想我误会了。 - Tim Down