1763
登录</a>

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

6
  • 29
    javascript:是众多URI方案之一:en.wikipedia.org/wiki/URI模式,比如数据:. 评论 2014年8月23日21:05
  • 9
    你可以使用href=“javascript:”为了同样的目的。如回答中所述这个问题,的无效(0)该部分最初用于早期版本的浏览器,其中javascript:URI处理不同。但现在我甚至找不到一个速记不起作用的版本,至少IE7能正确处理这个问题。
    – 用户
    评论 2015年4月5日3:24
  • 1
    我还看到了href=“javascript://”,这更好吗?
    – 光剑
    评论 2016年12月30日13:43
  • href=“javascript://”对我来说不起作用void(0)工作得很好。
    – 桑迪普
    评论 2017年6月3日8:20
  • @sandip你当时用的是哪种浏览器?href=“javascript://”href=“javascript:void(0)”是等效的。//是JS注释。 评论 2021年5月29日1:25

14答案14

重置为默认值
1297

这个空隙运算符计算给定的表达式,然后返回未定义.

这个空隙运算符通常仅用于以获得未定义原始的值,通常使用“无效(0)“(其中等于“无效0”). 在这些cases,全局变量未定义可以改为使用(假设它有未分配给非默认值值)。

此处提供了一个解释:空隙操作人员.

你想用href公司通常情况下javascript:URL会将浏览器重定向到评估JavaScript结果的纯文本版本。但如果结果是未定义,则浏览器保持在同一页面上。无效(0)只是一个简短的脚本,其计算结果为未定义.

22
  • 23
    当href被赋予“未定义的原语值”时,这意味着什么?
    – 天啊
    评论 2009年8月18日5:32
  • 16
    “通常,javascript:url会将浏览器重定向到评估javascript结果的纯文本版本。”你能在这里举个例子吗?我从未见过这样的用法。
    – 天啊
    评论 2009年8月18日5:40
  • 111
    凤凰城正在谈论的一个例子是立即行动</a> ●●●●。如果dosomething返回false,那么单击链接只会导致浏览器退出页面并显示“false”。然而<a href=“javascript:dosomething();void(0)”>立即行动</a> 避免了这个问题。继续粘贴javascript:1+1;进入浏览器地址栏。浏览器应显示“2”
    – 布雷顿
    评论 2009年8月18日5:50
  • 11
    因为void是一元运算符。Void不是一个值,也不是一个函数。它需要一个值来对其右侧进行操作,否则会抛出错误。
    – 布雷顿
    评论 2009年8月18日5:59
  • 16
    尝试在错误控制台中查找?它明确抛出了一个语法错误。它是无效的javascript。道格拉斯·克罗克福德(Douglas crokford)建议不要使用void,因为一元运算符/函数/值的混淆成本太高,无法处理。
    – 布雷顿
    评论 2009年8月18日6:05
518

除了技术答案外,javascript:无效意味着作者做错了。

没有充分的理由使用javascript:伪URL(*)。实际上,如果有人尝试“书签链接”、“在新标签页中打开链接”等操作,都会导致混乱或错误。现在人们已经习惯了使用鼠标中键来打开新标签:它看起来像一个链接,你想在新标签中阅读它,但实际上它根本不是真正的链接,并在点击鼠标中键时显示不需要的结果,如空白页面或JS错误。

<a href=“#”>是一种常见的替代方案,可以说它可能不那么糟糕。然而你必须记住返回false来自您的onclick(单击)事件处理程序,以防止跟踪链接并向上滚动到页面顶部。

在某些情况下,可能会有一个实际有用的位置来指向链接。例如,如果你有一个控件,你可以单击它来打开上一个idden<div id=“foo”>,使用它是有意义的<a href=“#foo”>或者如果有一种非JavaScript的方式来做同样的事情(例如,“thispage.php?show=foo”将foo设置为开始可见),您可以链接到它。

否则,如果一个链接只指向某个脚本,那么它实际上不是一个链接,不应该这样标记。通常的方法是添加onclick(单击)<span>,<div>,或一个<a>没有href公司并以某种方式设置样式,使其清晰可见,您可以单击它。这是StackOverflow[在编写时所做的;现在它使用href=“#”].

这样做的缺点是您失去了键盘控制,因为您无法点击span/div/bare-a或用空格激活它。这是否真的是一个缺点取决于元素打算采取什么样的操作。您可以通过添加选项卡索引并收听空格键。但它永远不会100%重现真实的浏览器行为,尤其是因为不同的浏览器对键盘的响应不同(更不用说非可视浏览器)。

如果你真的想要一个不是链接但可以通过鼠标或键盘正常激活的元素,你想要的是<按钮类型=“button”>(或<输入类型=“button”>对于简单的文本内容也一样好)。如果你愿意的话,你可以随时使用CSS来重新设计它的样式,使它看起来更像一个链接而不是一个按钮。但由于它的行为就像一个按钮,所以你应该这样标记它。

(*:无论如何,在网站创作中。显然它们对bookmarklet很有用。javascript:伪URL在概念上很奇怪:它不是指向某个位置,而是调用当前位置内的活动代码。它们给浏览器和网络应用程序带来了巨大的安全问题,不应该由网景公司发明。)

15
  • 7
    除了@bobince的精彩帖子外:几个月前,我还研究了href公司s、 包括怪癖和副作用;你们中的一些人可能会发现它很有用:jakub-g.github.com/accessibility/onclick 评论 2013年2月12日15:33
  • 5
    <a href=“#”><span>出于可访问性的原因,所以我很高兴so已经改变了。但我还是喜欢<按钮类型=“button”>/<输入类型=“button”>+样式。
    – 博宾塞
    评论 2014年5月16日15:46
  • 77
    这是一种观点,不能回答问题。无效(0)在许多情况下都需要;“#”是一个黑客程序,它带来了一系列问题(它在我正在编写的应用程序中不起作用,它把我带到了这个页面)。
    – 费莱西
    评论 2015年3月24日3:46
  • 17
    我同意@feltwithe的观点。为什么要强迫别人“以特定的方式做”?在15年的编程生涯中,我还没有看到“应该总是这样做”这句座右铭如何不会让人们自己制造混乱 评论 2015年7月24日2:48
  • 7
    从用户体验的角度来看,使用fragment-id是个坏主意,因为它会导致文档跳到页面顶部,除非预防违约使用。如果锚被用作表单上的按钮,请不要这样做。
    – 甚高频
    评论 2017年3月11日14:17
154

这意味着它什么也做不了。这是试图让链接不“导航”到任何地方。但这不是正确的方式。

实际上你应该返回false在中onclick(单击)事件,就像这样:

你好</a>

通常,如果链接正在执行某些“JavaScript-y”操作,则使用该选项。比如发布AJAX表单,或者交换图像,或者其他什么。在这种情况下,只需使任何被调用的函数返回.

然而,为了让你的网站变得非常棒,如果浏览者选择不运行JavaScript,通常你会包含一个具有相同功能的链接。

<a href=“backup_page_displaying_image.aspx”onclick=“return coolImageDisplayFunction();”>你好</a>
13
  • 35
    no no-return false将停止默认行为,因此#永远不会出现
    – 马格纳
    评论 2009年8月18日5:43
  • 23
    url协议实际上是一个标准,而不是一个真正的标准。因此,href=“#”onclick=“return false;”符合标准,而href=“javascript:void(0)”则不符合标准,因为没有官方标准指定该做什么。
    – 布雷顿
    评论 2009年8月18日5:55
  • 10
    最重要的是,Douglas Crockford不喜欢void,所以jslint会抱怨它。基本上,由于void是一个运算符,而不是一个值,所以它非常令人困惑,并引发了许多问题,比如这个问题。最好完全避免。哈哈。
    – 布雷顿
    评论 2009年8月18日5:57
  • 4
    布兰登:见布伦顿的回应。我推荐的方式是最受支持的,正如我在文章的第二部分所说,在一个“合适”的网站上,你甚至永远不会使用“#”,因为你将提供后备系统来处理缺乏javascript的问题。 评论 2009年8月18日6:00
  • 23
    +1表示包含真是太棒了例子。即使您在JavaScript中所做的工作没有静态HTML备份,您也可以执行以下操作<a href=“enableJavaScriptToSeeMyCompletelyAwesomeSite.html”onclick=“completelyAwesome();return false;”>. 评论 2009年8月18日18:29
102

这是一种非常流行的向HTML链接添加JavaScript函数的方法。
例如:[打印]你在许多网页上看到的链接都是这样写的:

打印</a>

为什么我们需要href公司虽然onclick(单击)只有自己才能完成这项工作?因为当用户将鼠标悬停在文本“打印”上时href公司,光标将变为插入符号(ꕯ)而不是指针(👆). 只有href公司在上标记将其验证为超链接。

替代href=“javascript:void(0);”,是使用href=“#”。此替代方案不需要在用户的浏览器中打开JavaScript,因此更具兼容性。

5
  • 7
    如果javascript被关闭,也没有任何用处。
    – 贾森
    评论 2016年3月9日22:40
  • 17
    你不需要href公司获取指针指针;它只需要一点CSS。 评论 2017年7月4日3:02
  • 1
    为什么不把JavaScript函数放在href中,而放在onclick中? 评论 2019年4月28日15:23
  • 我同意@Sid的观点——如果你使用它来触发javascript函数,那么<a href=“javascript:callPrintFunction()”>更干净(尽管它可能是按钮而不是如果它真的不能带你去任何地方,那也不要担心)。 评论 2019年5月9日12:25
  • 1
    href=“#”可能会导致令人不快的意外情况,比如xhr请求被中止,在点击该链接时会被调用。最近,我很难调试一个网站,如果用户碰巧所在的地址不是该网站的根地址,该网站将中止oidc登录请求。#href导致它在xhr请求完成之前重新加载地址。 评论 2019年7月23日14:56
102

有一个巨大的行为上的差异#javascript:void(0);.

#将您滚动到页面顶部,但javascript:void(0);没有。

如果您正在编写动态页面,这一点非常重要,因为用户在单击页面上的链接时不想返回顶部。

5
  • 31
    @Salvin:The滚动到页面顶部可以通过返回发送到事件处理程序:onclick=“doSomething();return false;”,或者如果做某事()收益,您可以使用onclick=“return doSomething();”. 评论 2009年8月18日18:25
  • 55
    @格兰特·瓦格纳(GrantWagner)——或者,5年后,e.预防违约().
    – 试验
    评论 2014年7月26日0:47
  • 1
    您可能想编辑/删除此答案,因为"#"当返回false时,滚动到顶部。
    – 纳文
    评论 2015年10月30日6:06
  • 4
    @你说得对,但这已经过时了。现在人们认为,通过分析发表评论是正确的。 评论 2015年11月12日15:15
  • @trysis或者,在内联html中,使用事件对于e(电子). The事件变量在内联html中可用onclick(单击)处理程序。<a href=“#”onclick=“event.proventDefault();”></a> 评论 2020年6月27日5:41
53

你应该在你的标签。调用返回“undefined”的JavaScript函数就可以了。链接到“#”也是如此。

Internet Explorer 6中没有href的锚定标记无法获取a: 悬停应用了样式。

是的,这很可怕,是一种轻微的反人类罪,但同样,一般来说,Internet Explorer 6也是如此。

我希望这能有所帮助。

Internet Explorer 6实际上是一项重大的反人类犯罪。

0
46

值得一提的是,你有时会看到无效0当检查未定义时,仅仅因为它需要较少的字符。

例如:

if(某物===未定义){做某事();}

比较对象:

if(某物===void 0){做某事();}

一些缩小方法取代未定义具有无效0因为这个原因。

  • 14
    一个值得注意的例子是TypeScript(活生生的例子),它编译默认参数值以进行检查无效0。当许多方法使用默认参数值时,3个字符的差异会很快增加。 评论 2017年1月16日11:26
  • 1
    “由于这个原因,一些缩小方法用void 0替换undefined。”我终于明白了!谢谢@squall给我的详细回答。 评论 2018年11月21日12:10
  • @∧RY∧N这不正确。您的代码也对,0,""还有其他一些事情。
    – 阿卡比
    评论 2020年12月30日13:14
34

的用法javascript:void(0)意味着HTML的作者正在滥用锚元素来代替按钮元素。

锚标记经常与onclick事件一起被滥用以创建通过将href设置为“#”或将“javascript:void(0)”设置为阻止刷新页面。这些值会导致意外复制/拖动链接时的行为,在新链接中打开链接选项卡/窗口、书签以及JavaScript仍在下载时,错误输出或被禁用。这也向传递了错误的语义辅助技术(例如屏幕阅读器)。在这些情况下建议使用<按钮>而不是。一般来说,您应该只使用使用适当URL进行导航的锚点。

资料来源:MDN的<a>第页.

2
  • 7
    +1是关于一个老问题的语义html。。。链接去地方,按钮做事情-如果我们不希望它看起来像一个按钮,我们应该只清除样式。
    – 凯夫拉
    评论 2017年10月11日17:14
  • 最大的例外是图像映射,可能需要执行JavaScript;因为它不是一个按钮,而是一个有多边形边界的链接,所以这是“唯一”的方法。
    – 用户4914655
    评论 2018年4月28日6:16
28

Web开发人员使用javascript:void(0)因为这是防止标签。void(*任何*)收益未定义这是一个错误的值。返回一个错误的值就像返回false在里面onclick(单击)事件阻止其默认行为的标记。

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

0
23

空隙是一个运算符,用于返回未定义值,使浏览器无法加载新页面。

Web浏览器将尝试获取任何用作URL的内容并加载它,除非它是返回null的JavaScript函数。例如,如果我们单击这样的链接:

点击我</a>

然后将显示一条警告消息,而不加载新页面,这是因为警觉的是返回空值的函数。这意味着当浏览器尝试加载新页面时,它会看到null,并且没有任何内容可加载。

关于void操作符需要注意的一件事是,它需要一个值,并且不能单独使用。我们应该这样使用它:

我是一个无用的链接</a>
  • 1
    我见过人们使用javascript:null而不是void。。。但这是一个问题。Chrome null有效,在Firefox中,它尝试加载页面null。很高兴你更新了。有趣的错误。 评论 2016年12月28日5:08
  • 我在代码库中发现了一些其他用途,比如javascript:null,但javascript:null()是未定义的,所以可以使用。 评论 2016年12月28日5:11
  • 1
    所以基本上就像jquery的prevendDefault并返回false?
    – 罗伯特
    评论 2017年10月27日14:22
21

链接必须具有href公司目标以使其成为可用的显示对象。

大多数浏览器不会在href公司<a>元素,例如:

获取元素</a>

因为href公司大多数浏览器中的标记不允许空白,或者会将空白转换为%20(空间的HEX代码),JavaScript解释器将遇到多个错误。

因此,如果您想使用<a>元素的href公司要执行内联JavaScript,必须为指定有效值href公司首先不太复杂(不包含空格),然后在事件属性标记中提供JavaScript,如onClick(单击),鼠标移上,鼠标移开时等。

典型的答案是这样做:

获取元素</a>

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

放置#在中<a>元素的href公司指定根锚点,默认情况下是页面的顶部,但您可以通过指定名称属性内的<a>元素。

<a name=“middleOfPage”></a>

然后您可以更改<a>元素的href公司跳到页面中间并在中执行JavaScriptonClick(单击)事件:

获取元素</a>

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

获取元素</a>

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

使用内嵌javascript的最佳方法是<a>元素的href公司,但无需执行上述任何操作JavaScript:void(0);:

获取元素</a>

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

空隙是一个关键字,当提供参数时0收益未定义,它不使用任何其他资源来处理在未指定0(它对内存管理/性能更友好)。

接下来发生的事情是onClick(单击)执行。页面不移动,显示时什么也没有发生。

1
  • 4
    +我解释了像这样的主持人的所有不同方式能够被处理。不过我的意见是<a>要素一定要去某个地方; 如果只是在页面上执行一些javascript,那么<按钮>应改为使用。使用<按钮>更具语义性,并且让您免受关于如何攻击锚的整个争论href公司.编辑:看起来@Ronnie Royston下面的回答已经涵盖了这个论点。 评论 2020年3月18日18:31
20

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

void运算符的语法为:无效«expr»它计算expr并返回未定义的。

如果将void实现为一个函数,它将如下所示:

函数myVoid(expr){返回未定义;}

这个void操作符有一个重要的用法,即丢弃表达式的结果。

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

javascript:void window.open(“网址:http://example.com/")
5
  • 感谢您明确说明“无效”的理由是什么!在其他答案中并不清楚,只有“虚无需要论证”。 评论 2017年4月13日18:05
  • 答案很好,但有一个细节,void实现将类似于:函数myVoid(expr){expr();返回未定义;}你忘了添加expr(); 评论 2018年11月18日4:30
  • 1
    @胡安玛·梅内德斯:不是这样的。快递在以下情况下已评估myVoid()调用(结果的值作为参数传递)
    – 乌多·G
    评论 2019年1月6日22:49
  • @我很好奇,你是怎么认识那些人的?你能解释一下吗。 评论 2019年1月7日3:07
  • 1
    @JuanmaMenendez:表达在函数中,总是在调用函数本身之前计算参数。对不起,我手头没有明确的文件,但请自己试试:function(){警报(“foo”);}是有效的表达.void(function(){alert(“foo”);})收益未定义而且确实如此显示警报,而myVoid(function(){alert(“foo”);})是(在您的版本中,不是戈帕尔·雅达夫).
    – 乌多·G
    评论 2019年1月7日8:08
16

这个空隙运算符对给定表达式求值,然后返回未定义的值。它避免刷新页面。

0
15

据我所见空隙操作人员JavaScript中有三种常见用法。你指的那个,<a href=“javascript:void(0)”>是制作<a>标记为no-op。一些浏览器会处理<a>标签是否具有href公司,因此这是使用href公司那没用。

这个空隙运算符是一元运算符,它接受参数并返回未定义.所以var x=无效42;方法x===未定义。这很有用,因为严格模式,未定义实际上是一个有效的变量名。因此,一些JavaScript开发人员使用无效0而不是未定义理论上,你也可以<a href=“javascript:undefined”>这与无效(0).

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.