Answers:
的
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开头可见),则可以链接到该脚本。
否则,如果链接仅指向某个脚本,则它实际上不是链接,因此不应将其标记为链接。通常的做法是添加onclick
到<span>
,<div>
或者<a>
没有href
以某种方式和风格也要想清楚,你可以点击它。这就是StackOverflow [在撰写本文时所要做的;现在它使用href="#"
]。
这样做的缺点是您失去了键盘控制权,因为您无法切换到span / div / bare-a或使用空格激活它。这是否实际上是不利的,取决于该元素打算采取哪种动作。您可以尝试通过tabIndex
在元素上添加a 并监听Space按键来模仿键盘的交互性。但这绝不会100%重现真实的浏览器行为,尤其是因为不同的浏览器对键盘的响应可能不同(更不用说非视觉浏览器了)。
如果您确实想要一个不是链接但可以通过鼠标或键盘正常激活的元素,则您想要的是一个元素<button type="button">
(或者<input type="button">
对于简单的文本内容也是如此)。您始终可以使用CSS对其进行样式更改,因此,如果需要,它看起来更像是链接而不是按钮。但是由于它的行为就像一个按钮,因此您应该真正对其进行标记。
(*:在现场创作,反正很显然他们是有用的bookmarklet。javascript:
伪网址是一个概念bizarreness:一点不点的位置的定位,而是调用当前位置内激活码他们造成了巨大的安全。浏览器和Web应用程序都出现问题,而Netscape永远不会发明。)
href
s的跨浏览器键盘的可导航性进行了一些研究,包括怪癖和副作用。某些人可能会发现它很有用:jakub-g.github.com/accessibility/onclick
void(0)
在许多情况下是必需的;“#”是一个黑客,它带来了很多问题(它在我编写的应用程序中不起作用,这使我进入了此页面)。
preventDefault
使用文档,否则它会使文档跳到页面顶部。如果将锚点用作表单上的按钮,请不要这样做。
这意味着它什么也不会做。试图使链接不在任何地方“导航”。但这不是正确的方法。
您实际上应该只是return false
在onclick
事件中,如下所示:
<a href="#" onclick="return false;">hello</a>
通常,如果链接正在执行某些“ JavaScript-y”操作,则使用它。就像发布AJAX表单,交换图片一样。在这种情况下,您只需执行任何称为return的函数false
。
但是,为了使您的网站更加出色,通常,如果浏览者选择不运行JavaScript,通常会包含一个执行相同操作的链接。
<a href="backup_page_displaying_image.aspx"
onclick="return coolImageDisplayFunction();">hello</a>
<a href="enableJavaScriptToSeeMyCompletelyAwesomeSite.html" onclick="completelyAwesome();return false;">
。
“#”与javascript:void的行为存在巨大差异
“#”将您滚动到页面的顶部,而“ javascript:void(0);” 才不是。
如果您要编码动态页面,这非常重要。用户不希望仅单击页面上的链接就返回顶部。
false
:onclick="doSomething();return false;"
如果doSomething()
返回false
,则可以使用onclick="return doSomething();"
。
e.preventDefault()
。
"#"
它没有当你返回false滚动到顶部。
这是将JavaScript函数添加到HTML链接的一种非常流行的方法。
例如:[Print]
您在许多网页上看到的链接是这样写的:
<a href="javascript:void(0)" onclick="callPrintFunction()">Print</a>
为什么我们需要href
消磨onclick
单独可以完成这项工作?因为当用户将鼠标悬停在“打印”文本上时href
,光标将变为尖号(ꕯ)而不是指针(👆)。仅href
在a
标签上才会将其验证为超链接。
的替代方法href="javascript:void(0);"
是使用href="#"
。此替代方法不需要在用户浏览器中打开JavaScript,因此更加兼容。
href
获取指向的手形光标;只需要一点CSS。
<a href="javascript:callPrintFunction()">
它会更干净(尽管如果它实际上不会带您到任何地方,则可能应该是锚点button
而不是a
锚点)。
href="#"
可能会导致令人讨厌的意外-就像中止的xhr请求一样,恰好在点击该链接时被调用。最近,我很难调试一个网站,如果用户碰巧不是该网站的根地址,则该网站将终止oidc登录请求。#
href导致它在xhr请求完成之前重新加载地址。
值得一提的是,在检查undefined时有时会看到void 0,这仅仅是因为它需要较少的字符。
例如:
something === undefined
与
something === void 0
因此,某些缩小方法会将undefined替换为void 0。
void 0
。当许多方法使用默认参数值时,三个字符的差异会迅速加起来。
用法的使用javascript:void(0)
意味着HTML的作者滥用了anchor元素而不是button元素。
通过将href设置为“#”或“ javascript:void(0)”以防止页面刷新,锚点标记通常会与onclick事件一起使用以创建伪按钮。当复制/拖动链接,在新选项卡/窗口中打开链接,添加书签以及JavaScript仍在下载,错误输出或被禁用时,这些值会导致意外行为。这也将不正确的语义传达给辅助技术(例如,屏幕阅读器)。在这种情况下,建议改用a
<button>
。通常,您应该只使用锚来使用正确的URL进行导航。
资料来源:MDN的<a>
Page。
void
是用于返回undefined
值的运算符,因此浏览器将无法加载新页面。
除非它是一个返回null的JavaScript函数,否则Web浏览器将尝试使用任何用作URL的内容并将其加载。例如,如果我们单击这样的链接:
<a href="javascript: alert('Hello World')">Click Me</a>
那么将显示一条警报消息,而无需加载新页面,这是因为alert
该函数返回了空值。这意味着,当浏览器尝试加载新页面时,它会显示为null并且没有任何内容可加载。
有关void运算符的重要注意事项是它需要一个值,并且不能单独使用。我们应该这样使用它:
<a href="javascript: void(0)">I am a useless link</a>
要理解这一概念,首先应该了解JavaScript中的void运算符。
void运算符的语法为:void «expr»
评估expr并返回未定义。
如果将void实现为函数,则其外观如下:
function myVoid(expr) {
return undefined;
}
该void运算符的一个重要用法是-丢弃表达式的结果。
在某些情况下,重要的是要返回undefined而不是表达式的结果。然后可以使用void放弃该结果。一种这样的情况涉及到javascript:URL,对于链接,应避免使用URL,但对小书签有用。当您访问这些URL之一时,许多浏览器都会用评估URL“内容”的结果来替换当前文档,但前提是结果没有不确定。因此,如果要打开新窗口而不更改当前显示的内容,则可以执行以下操作:
javascript:void window.open("http://example.com/")
function myVoid(expr) { expr(); return undefined; }
您忘记添加 expr();
expr
在myVoid()
调用时已经被评估(该表达式的结果作为参数传递)
function() { alert("foo"); }
是有效的表达式。void(function() { alert("foo"); })
收益undefined
和它不显示警报,而myVoid(function() { alert("foo"); })
不会(在你的版,而不是一个戈帕尔亚达夫)。
的void
运算符计算给定表达式,然后返回未定义。这样可以避免刷新页面。
Web开发人员javascript:void(0)
之所以使用它,是因为它是防止a
标记默认行为的最简单方法。void(*anything*)
返回undefined
,这是一个虚假的值。并且返回假值就像return false
在标记onclick
事件中a
阻止其默认行为一样。
因此,我认为这javascript:void(0)
是防止a
标记默认行为的最简单方法。
链接必须具有要指定的HREF目标,才能使其成为可用的显示对象。
大多数浏览器不会在
<A HREF=""
标签,例如:
<A href="JavaScript:var elem = document.getElementById('foo');"
因为大多数浏览器中的HREF标记都不允许空格,或者会将空格转换为%20(相当于SPACE的十六进制),这使得JavaScript绝对对解释器毫无用处。
因此,如果要使用A HREF标签执行内联JavaScript,则必须为HREF FIRST指定一个不太复杂(不包含空格)的有效值,然后在事件属性标签(如OnClick)中提供JavaScript ,OnMouseOver,OnMouseOut等。
典型的答案是做这样的事情:
<A HREF="#" onclick="var elem = document.getElementById('foo');">Get the object</a>
这可以正常工作,但是由于井号/井号指示它可以使页面跳至顶部。
只需在A HREF标签中提供井号/哈希标签即可实际指定根锚,默认情况下,根锚始终位于页面顶部,您可以通过在A HREF标签内指定NAME属性来指定其他位置。
<A NAME='middleofpage'></A>
然后,您可以将A HREF标记更改为跳转到“ middleofpage”并在OnClick事件中执行JavaScript,如下所示:
<A HREF="#middleofpage" onclick="var elem = document.getElementById('foo');">Get the object</a>
在很多时候,您都不希望该链接跳来跳去,因此您可以做两件事:
<A HREF="#thislinkname" name='thislinkname' onclick="var elem = document.getElementById('foo');">Get the object</a>
现在单击时将无处可去,但是它可能导致页面从当前视口重新居中。不好看 什么是使用A HREF提供内联JavaScript的最佳方法,而无需执行上述任何操作?JavaScript:无效(0);
<A HREF="JavaScript:void(0);" onclick="var elem = document.getElementById('foo');">Get the object</a>
这告诉浏览器现在不运行,而是执行有效的JavaScript:void(0);。首先在HREF标记中起作用,因为它不包含空格,也不会被解析为URL。相反,它将由编译器运行。VOID是一个关键字,当提供0的性能参数时,它返回UNDEFINED,它不使用更多的资源来处理不指定0就会出现的返回值(它对内存管理/性能更友好)。
接下来发生的事情是执行OnClick。页面不会移动,在显示方面不会发生任何事情。
<a>
元素必须始终位于某处;如果仅在页面上执行某些javascript,<button>
则应改用a。使用不仅<button>
具有语义,而且可以使您摆脱有关如何侵入锚点的整个辩论href
。 编辑:看起来@Ronnie Royston在下面的答案已经包含了这个论点。
JavaScript:不包含网址;这是void可以用来编写较短代码的地方。
var error1 = false,
error2 = false,
error3 = false;
function error1() {
error1 = true;
}
function myFunction() {
// You can easily return and call a function at once, if you don't care about myFunction's return value
if (!someCondition1)
return error1();
// What if you want to set a value first?
if (!someCondition2) {
error2 = true;
return
}
// Shortest way to return and set a value at once
if (!someCondition3)
return void(error3 = true);
// More code goes here
}
javascript:
是许多URI方案之一:en.wikipedia.org/wiki/URI_scheme,例如data:
。