<a href="javascript:void(0)" id="loginlink">login</a>
我见过href
很多次这样的,但我不知道这到底是什么意思。
<a href="javascript:void(0)" id="loginlink">login</a>
我见过href
很多次这样的,但我不知道这到底是什么意思。
的
void
运算符计算给定表达式,然后返回undefined
。的
void
操作者经常被用来仅获取undefined
原始值,通常使用“void(0)
”(这是相当于“void 0
”)。在这些情况下,undefined
可以改用全局变量(假设它没有被分配给一个非默认值)。
此处提供了解释:void
operator。
您想要href
使用链接的执行此操作的原因是,通常,javascript:
URL 会将浏览器重定向到评估该 JavaScript 的结果的纯文本版本。但如果结果是undefined
,则浏览器会停留在同一页面上。void(0)
只是一个简短的脚本,评估为undefined
.
除了技术答案外,还javascript:void
意味着作者做错了。
没有充分的理由使用javascript:
伪 URL(*)。在实践中,如果有人尝试诸如“书签链接”、“在新选项卡中打开链接”等操作,则会导致混淆或错误。这种情况经常发生,现在人们已经习惯了中间点击换新标签:它看起来像一个链接,你想在新标签中阅读它,但结果证明它根本不是一个真正的链接,并在单击中键时给出不需要的结果,例如空白页或 JS 错误。
<a href="#">
是一种常见的替代方案,可以说是不那么糟糕。但是,您必须记住return false
从onclick
事件处理程序中防止链接被跟踪并向上滚动到页面顶部。
在某些情况下,可能有一个实际有用的地方可以指向链接。例如,如果你有一个控件,你可以点击它打开一个以前隐藏的<div id="foo">
,使用<a href="#foo">
链接到它是有意义的。或者,如果有一种非 JavaScript 的方式来做同样的事情(例如,'thispage.php?show=foo' 将 foo 设置为可见),您可以链接到它。
否则,如果链接仅指向某个脚本,则它不是真正的链接,不应如此标记。通常的方法是将 a 添加onclick
到 a <span>
、<div>
或 an ,<a>
不带 anhref
并以某种方式设置样式以明确您可以单击它。这就是 StackOverflow [在撰写本文时所做的;现在它使用href="#"
]。
这样做的缺点是你失去了键盘控制,因为你不能在 span/div/bare-a 上使用 tab 或用空格激活它。这是否真的是一个缺点取决于元素打算采取什么样的行动。您可以通过向tabIndex
元素添加 a并侦听 Space 按键来尝试模仿键盘交互性。但它永远不会 100% 重现真实的浏览器行为,尤其是因为不同的浏览器可以对键盘做出不同的响应(更不用说非可视化浏览器了)。
如果你真的想要一个不是链接但可以通过鼠标或键盘正常激活的元素,你想要的是一个<button type="button">
(或者<input type="button">
同样好,对于简单的文本内容)。如果需要,您始终可以使用 CSS 重新设置样式,使其看起来更像是链接而不是按钮。但由于它的行为就像一个按钮,这才是你真正应该标记它的方式。
(*:无论如何,在站点创作中。显然它们对书签很有用。javascript:
伪 URL 是一个概念上的奇怪之处:定位器不指向某个位置,而是调用当前位置内的活动代码。它们造成了巨大的安全性浏览器和 web 应用程序的问题,并且不应该由 Netscape 发明。)
这意味着它什么都不做。这是试图让链接不在任何地方“导航”。但这不是正确的方法。
你实际上应该只是return false
在onclick
事件中,像这样:
<a href="#" onclick="return false;">hello</a>
通常,如果链接正在做一些“JavaScript-y”的事情,就会使用它。比如发布一个 AJAX 表单,或者交换一个图像,或者其他什么。在这种情况下,您只需让任何被调用的函数返回即可false
。
然而,为了使您的网站非常出色,通常您会包含一个执行相同操作的链接,如果浏览它的人选择不运行 JavaScript。
<a href="backup_page_displaying_image.aspx"
onclick="return coolImageDisplayFunction();">hello</a>
这是一种非常流行的将 JavaScript 函数添加到 HTML 链接的方法。
例如:[Print]
你在很多网页上看到的链接都是这样写的:
<a href="javascript:void(0)" onclick="callPrintFunction()">Print</a>
为什么我们需要href
在onclick
独处时才能完成工作?因为当用户将鼠标悬停在没有 'Print' 的文本上时href
,光标将变为插入符号 (ꕯ) 而不是指针 (👆)。只有href
在a
标签上才能将其验证为超链接。
的替代方法href="javascript:void(0);"
是使用href="#"
。这种替代方案不需要在用户的浏览器中打开 JavaScript,因此它更兼容。
vs的行为存在巨大差异。#
javascript:void(0);
#
将您滚动到页面顶部,但javascript:void(0);
不会。
如果您正在编写动态页面,这一点非常重要,因为用户在单击页面上的链接时不想返回顶部。