javascript:;与 javascript:void(0);

Posted

技术标签:

【中文标题】javascript:;与 javascript:void(0);【英文标题】:javascript:; vs javascript:void(0); 【发布时间】:2011-03-08 17:27:13 【问题描述】:

如果我在href 属性中为a 锚(链接)使用javascript:;javascript:void(0);,我想知道它们有什么区别

<a href="javascript:;" onclick="DoSomething();">Link</a>

<a href="javascript:void(0);" onclick="DoSomething();">Link</a>

我看到它们在所有浏览器上的行为都相同,但技术上的区别是什么?

问候, 玛迪

【问题讨论】:

重要提示:这里的每个答案都指出,无论如何,不​​应再使用onclick 属性。确保你不会错过那条非常重要的信息 :) 我知道,我只是在演示使用它,但在我的代码中我总是使用事件处理程序,而不是直接将它放在 html 标记中 【参考方案1】:

一个运行没有语句的 JavaScript,另一个运行评估语句 0 然后返回 undefined 的 JavaScript。

Neither should be used.

【讨论】:

+1 表示不鼓励这种模式。真的很迂腐,实际上第一个包含 one 语句,Empty Statement ; :P 在第一种情况下不评估任何语句是不正确的。分号代表一个空语句,它一个语句。 @timpeterson — 3 年后,更好的选择没有改变(并且仍然与答案相关)。 @Quentin 和 3 年后,链接现在断开了;P @SnakeDoc — 并且完好无损【参考方案2】:

我同意 David 的观点,两者都不应该使用。 javascript 伪协议可以在某些浏览器中将页面置于等待状态,这可能会产生意想不到的后果。举个例子,我花了几个小时尝试调试一个 Web 应用程序,当有人在页面加载后不久单击 javascript: 链接时,它就会导致 IE6 崩溃。原来,进入等待状态的页面与试图初始化的 Flash 电影冲突。我通过用这种格式的链接替换链接解决了这个问题:

<a href="#" onclick="DoSomething(); return false;">Link</a>

“return false”会阻止链接实际被关注。

【讨论】:

因此,如果 JavaScript 可用,它将DoSomething,如果不可用……它会链接到页面顶部。这几乎总是一个糟糕的后备位置。 未来注意事项:感谢上帝,我们不必再担心 IE6!【参考方案3】:

只有后者javascript:void(0); 更具可读性,并且是一个公认的约定,即此代码什么都不做

值得注意的是,行业标准在这种语法方面已经取得了长足的进步。您应该研究渐进增强。

【讨论】:

以上是关于javascript:;与 javascript:void(0);的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript阻塞剖析与改善

javascript:;与javascript:void;

javascript与python的比较

JavaScript之基础-16 JavaScript 原型与继承

javascript javascript:与Parsley的日期验证

Javascript对象属性与方法汇总