<a href="javascript:void(0)" id="loginlink">login</a>

我见过很多次这样的威胁,但我不知道这到底意味着什么。


当前回答

使用javascript:void(0)意味着HTML的作者误用了锚元素而不是按钮元素。

锚标记经常与onclick事件一起滥用以创建通过将href设置为“#”或“javascript:void(0)”防止页面刷新。这些值会导致意外复制/拖动链接时的行为,在新的标签/窗口、书签以及当JavaScript仍在下载时,出错或被禁用。这也向辅助技术(例如屏幕阅读器)。在这些情况下建议改用<button>。通常,您只应使用使用正确URL导航的锚点。

资料来源:MDN的<a>页面。

其他回答

要理解这个概念,首先应该理解JavaScript中的void运算符。

void运算符的语法为:void«expr»,它计算expr并返回undefined。

如果将void实现为函数,则如下所示:

function myVoid(expr) {
    return undefined;
}

这个void运算符有一个重要的用法,那就是丢弃表达式的结果。

在某些情况下,返回undefined而不是表达式的结果是很重要的。然后可以使用void来丢弃该结果。一种这样的情况涉及javascript:URL,对于链接应该避免使用javascript,但对于bookmarklets很有用。当您访问其中一个URL时,许多浏览器会将当前文档替换为评估URL“内容”的结果,但前提是结果未定义。因此,如果要在不更改当前显示内容的情况下打开新窗口,可以执行以下操作:

javascript:void window.open("http://example.com/")

void运算符计算给定的表达式,然后返回undefined。void运算符通常仅用于获取未定义的原语值,通常使用“void(0)”(相当于“void 0”)。在这些case,全局变量未定义可以使用(假设它有未分配给非默认值值)。

这里提供了一个解释:void运算符。

您希望使用链接的href进行此操作的原因是,通常javascript:URL会将浏览器重定向到评估该javascript结果的纯文本版本。但如果结果未定义,则浏览器将保持在同一页面上。void(0)只是一个短而简单的脚本,其计算结果为undefined。

Web开发人员使用javascript:void(0),因为这是防止标记默认行为的最简单方法。void(*anything*)返回undefined,它是一个错误的值。返回falsy值类似于在标记的onclick事件中返回false,该事件阻止其默认行为。

所以我认为javascript:void(0)是防止标记默认行为的最简单方法。

链接必须指定href目标,才能使其成为可用的显示对象。

大多数浏览器不会在<a>元素的href中解析高级JavaScript,例如:

<a href="javascript:var el = document.getElementById('foo');">Get element</a>

由于大多数浏览器中的href标记不允许空白或将空白转换为%20(空格的十六进制代码),JavaScript解释器将遇到多个错误。

因此,如果要使用<a>元素的href来执行内联JavaScript,必须首先为href指定一个不太复杂的有效值(不包含空格),然后在事件属性标记中提供JavaScript,如onClick、onMouseOver、onMouseOut等。

典型的答案是这样做:

<a href="#" onclick="var el = document.getElementById('foo');">Get element</a>

这很好,但它会使页面滚动到顶部,因为告诉浏览器这样做。

在<a>元素的href中放置#指定根锚点,默认情况下,根锚点位于页面顶部,但您可以通过在<a<元素中指定name属性来指定不同的位置。

<a name="middleOfPage"></a>

然后,您可以更改<a>元素的href以跳转到middleOfPage并在onClick事件中执行JavaScript:

<a href="#middleOfPage" onclick="var el = document.getElementById('foo');">Get element</a>

很多时候,你不想让链接跳来跳去,所以你可以做两件事:

<a href="#thisLinkName" name="thisLinkCame" onclick="var elem = document.getElementById('foo');">Get element</a>

现在,单击它时,它将无法移动,但可能会导致页面从当前视口重新居中。

使用<a>元素的href使用内联javascript的最佳方法是javascript:void(0);:

<a href="javascript:void(0);" onclick="var el = document.getElementById('foo');">Get element</a>

这告诉浏览器不要去任何地方,而是执行JavaScript:void(0);函数,因为它不包含空格,并且不会被解析为URL。它将由编译器运行。

void是一个关键字,当提供参数0时,该关键字返回undefined,它不使用任何更多的资源来处理在不指定0的情况下会出现的返回值(它更便于内存管理/性能)。

接下来会执行onClick。页面不会移动,显示时不会发生任何事情。

使用javascript:void(0)意味着HTML的作者误用了锚元素而不是按钮元素。

锚标记经常与onclick事件一起滥用以创建通过将href设置为“#”或“javascript:void(0)”防止页面刷新。这些值会导致意外复制/拖动链接时的行为,在新的标签/窗口、书签以及当JavaScript仍在下载时,出错或被禁用。这也向辅助技术(例如屏幕阅读器)。在这些情况下建议改用<button>。通常,您只应使用使用正确URL导航的锚点。

资料来源:MDN的<a>页面。