What does “javascript:void(0)” mean?
1 | login |
我见过很多次这样的
The
void operator evaluates the given
expression and then returnsundefined .The
void operator is often used merely
to obtain theundefined primitive
value, usually using"void(0) " (which
is equivalent to"void 0 "). In these
cases, the global variableundefined
can be used instead (assuming it has
not been assigned to a non-default
value).
这里提供了一个解释:
使用链接的
除了技术上的回答,
没有充分的理由使用
在某些情况下,可能会有一个实际有用的地方来指向链接。例如,如果您有一个控件可以单击它打开以前隐藏的
否则,如果一个链接只指向某个脚本,则它实际上不是一个链接,不应标记为链接。通常的方法是将
这样做的缺点是,您会失去键盘控制,因为您不能在span/div/bare-a上制表或用空格激活它。这是否真的是一个缺点取决于元素打算采取什么样的行动。您可以尝试通过在元素中添加一个
如果您真的想要一个不是链接但可以通过鼠标或键盘正常激活的元素,那么您需要的是一个
(*:无论如何,在网站创作中。显然,它们对书签很有用。
这意味着它什么也做不了。这是试图让链接不"导航"到任何地方。但这不是正确的方式。
实际上,在
1 | hello |
通常,如果链接正在执行一些"javascript-y"操作,则使用该链接。比如发布一个Ajax表单,或者交换一个图像,等等。在这种情况下,您只需使任何函数被称为返回
然而,为了使你的网站完全棒极了,一般来说,如果浏览网站的人选择不运行javascript,你会包含一个执行相同操作的链接。
1 2 | <a href="backup_page_displaying_image.aspx" onclick="return coolImageDisplayFunction();">hello |
与javascript:void相比,""的行为有很大的不同。
""将您滚动到页面顶部而"javascript:void(0);"没有。
如果要对动态页面进行编码,这一点非常重要。用户不想仅仅因为单击了页面上的链接而返回顶部。
这是一种非常流行的向HTML链接添加javascript函数的方法。例如:在许多网页上看到的
1 | Print |
为什么我们需要
使用
您的a标签上应该始终有一个href。调用一个返回"undefined"的javascript函数就可以了。因此将链接到""。
Internet Explorer 6中没有href的定位标记不能应用
是的,这是一种可怕的轻微的危害人类的罪行,但总体而言,Internet Explorer 6也是如此。
我希望这有帮助。
Internet Explorer 6实际上是一项危害人类的重大犯罪。
值得一提的是,在检查未定义时,有时会看到void 0,这仅仅是因为它需要更少的字符。
例如:
1 | something === undefined |
VS
1 | something === void 0 |
因此,某些缩小方法将未定义替换为void 0。
Web浏览器将尝试获取用作URL的任何内容并加载它,除非它是返回空值的javascript函数。例如,如果我们单击这样的链接:
1 | Click Me |
然后会出现一条不加载新页面的警告消息,这是因为
关于void运算符需要注意的一个重要事项是,它需要一个值,不能由它自己使用。我们应该这样使用它:
1 | I am a useless link |
要理解这个概念,首先应该理解javascript中的void操作符。
void运算符的语法是:
如果将void实现为一个函数,它看起来如下:
1 2 3 | function myVoid(expr) { return undefined; } |
此void运算符有一个重要用法,即丢弃表达式的结果。
在某些情况下,重要的是返回未定义的,而不是表达式的结果。然后void可以用来丢弃这个结果。其中一种情况涉及到javascript:url,这对于链接应该避免,但对于书签很有用。当您访问其中一个URL时,许多浏览器会将当前文档替换为评估URL"内容"的结果,但前提是结果未定义。因此,如果要在不更改当前显示内容的情况下打开新窗口,可以执行以下操作:
1 | javascript:void window.open("http://example.com/") |
使用
Anchor tags are often abused with the onclick event to create
pseudo-buttons by setting href to"#" or"javascript:void(0)" to
prevent the page from refreshing. These values cause unexpected
behavior when copying/dragging links, opening links in a new
tabs/windows, bookmarking, and when JavaScript is still downloading,
errors out, or is disabled. This also conveys incorrect semantics to
assistive technologies (e.g., screen readers). In these cases, it is
recommended to use ainstead. In general you should only use
an anchor for navigation using a proper URL.
资料来源:MDN的
Web开发人员使用
所以我认为
链接必须具有要指定的Href目标,才能使其成为可用的显示对象。
大多数浏览器不会在
1 | <A HREF="" |
标签如:
1 | <A href="JavaScript:var elem = document.getElementById('foo');" |
因为大多数浏览器中的href标签不允许空白,或者会将空白转换为%20,这是一个十六进制的空格,这使得你的javascript对解释器毫无用处。
因此,如果要使用a href标记来执行内联javascript,必须首先为href指定一个不太复杂(不包含空格)的有效值,然后在onclick、onmouseover、onmouseout等事件属性标记中提供javascript。
典型的答案是这样做:
1 | <A HREF="#" onclick="var elem = document.getElementById('foo');">Get the object |
这很好,但它会使页面跳到顶部,因为pound sign/hash标记告诉它这样做。
只需在a href标记中提供一个pound sign/hash标记,就可以实际指定根锚点,默认情况下,根锚点始终位于页面顶部,通过在a href标记中指定name属性,可以指定其他位置。
1 | <A NAME='middleofpage'></A> |
然后,您可以将a href标记更改为跳转到"middleofpage",并在onclick事件中执行javascript,一旦发生这种情况:
1 | <A HREF="#middleofpage" onclick="var elem = document.getElementById('foo');">Get the object |
在很多时候,你不希望链接到处跳,所以你可以做两件事:
1 | <A HREF="#thislinkname" name='thislinkname' onclick="var elem = document.getElementById('foo');">Get the object |
现在,单击后它将无处可去,但它可能会导致页面从当前视区重新居中。这不漂亮。使用a href提供在线javascript的最佳方法是什么,但不必执行上述任何操作?javascript:空(0);
1 | <A HREF="JavaScript:void(0);" onclick="var elem = document.getElementById('foo');">Get the object |
这会告诉浏览器什么也不去,而是先在href标记中执行有效的javascript:void(0);函数,因为它不包含空白,并且不会被解析为URL。它将由编译器运行。void是一个关键字,当与0的Permeter一起提供时,它返回Undefined,它不使用任何其他资源来处理在不指定0的情况下将发生的返回值(它更易于内存管理/性能)。
接下来发生的事情是onclick被执行。页面不移动,显示时不会发生任何情况。
javascript:urls放在一边;这是void可以用来编写较短代码的地方。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 } |
另一个使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | $(document).ready(function() { jQuery(".show-hide-detail").hide(); jQuery(".show-hide-detail:first").show(); jQuery(".show-hide-btn a").click(function() { var thid_data = jQuery(this).attr('data-id'); jQuery(".show-hide-btn a").removeClass('active'); jQuery(this).addClass('active'); if (!jQuery("#" + thid_data).is(":visible")) { jQuery(".show-hide-detail").hide(); jQuery("#" + thid_data).show(); } }); }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <section> Room Dimensions <p class="description"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempor arcu non ligula convallis, vel tincidunt ipsum posuere.sollicitudin. Duis iaculis, arcu ut hendrerit pharetra, elit augue pulvinar magna </p> Living Room Dining Room Kitchen Master Bedroom Bedroom 2 Bedroom 3 Bathroom Gym Swimming Pool </section> |