href表达式<a href=“javascript:;”> </a>有什么作用?


228

我不时看到网页中使用了以下href。但是,我不知道这是要做什么或技术。有人可以详细说明吗?

<a href="javascript:;"></a>

2
SomeFunction():如果我不是错了.. JavaScript的你可以调用JS方法本
罗布

1
它并没有尝试做任何使用适当的单击处理程序无法更好地处理的事情。您应该避免这种情况,因为它难看,难以访问,并且导致人们javascript:在不应该使用该方案的地方使用该方案(onclick="javascript:…"
Gareth

Answers:


247

一个<a>元件是无效的HTML,除非它有任一种hrefname属性。

如果您希望它正确显示为链接(例如带下划线,手形指针等),则只有在具有href属性的情况下,它才会这样做。

因此,有时这样的代码有时被用作建立链接的方式,而不必在href属性中提供实际的URL 。开发人员显然希望链接本身不做任何事情,这是他知道的最简单的方法。

他可能在其他地方有一些javascript事件代码,当单击该链接时会触发这些事件,这将是他想要实际发生的事情,但是他希望它看起来像一个普通的<a>标记链接。

一些开发人员href='#'出于相同的目的使用,但这会导致浏览器跳到页面顶部,这可能是不需要的。而且他不能简单地将href留空,因​​为这href=''是指向当前页面的链接(即,它导致页面刷新)。

有解决这些问题的方法。在其中使用空的Javascript代码href就是其中之一,尽管它不是最佳解决方案,但它确实有效。


16
出于好奇,还有更好的方法吗?
拉曼·卡尔法恩

28
更好的是这样做是如果事件函数做的return false;还是event.preventDefault()那么href行动将永远不会被调用,所以你可以把东西在里面更明智。
Spudley 2011年

6
一个<a>没有hrefname不是无效的; 可以使用验证器轻松检查。
Jukka K. Korpela 2012年

2
片段(#部分)甚至都不应根据规范发送到Web服务器,因此您的浏览器可能在此处做错了事。
Joshua Walsh 2013年

2
@YoshieMaster说的是。如果URL有一个# 片段,则永远不会将其发送到Web服务器(或防火墙)。它仅由浏览器内部使用。在这种情况下,单击标记为<a href="#">... 的链接</a>不会导致您的浏览器向任何地方发送任何HTTP请求;要做的就是滚动到页面顶部。
马克·里德

38

基本上不是使用链接来移动页面(或锚),而是使用此方法启动了javascript函数

<script>
function doSomething() {
  alert("hello")
}
</script>
<a href="javascript:doSomething();">click me</a>

点击该链接将触发警报。


31

有几种机制可以避免链接到达其目的地。问题中的一个不是很直观。

一个更清洁的选择是使用href="#no"where #no在文档中未定义的锚点。

您可以使用更多语义名称,例如#disable或#action以提高可读性。

该方法的好处:

  • 避免了空的href =“#”的“移至顶部”效果
  • 避免使用javascript

缺点:

  • 您必须确保文档中未使用锚名称。

由于<a>元素不充当链接,因此在这些情况下,最好的选择不是使用<a>元素,而是<div>提供所需的类似链接的样式。


13
我也喜欢未定义的锚。但是,另一个缺点是它将锚添加到浏览器历史记录中,因此我选择在OP中使用空白JS方法。
约翰·里德

10
<a href="javascript:alert('Hello');"></a>

只是以下内容的简写:

<a href="" onclick="alert('Hello'); return false;"></a>

3
有点,但这不是一个真正的“喜欢按喜欢”比较。这就是为什么有些人一开始就陷入使用它的陷阱的原因。
Lankymart

9

这是使链接被单击时绝对不做任何事情的一种方法(除非Javascript事件已绑定到该事件)。

这是一种运行Javascript的方法,而不是通过以下链接进行操作:

<a href="Javascript: doStuff();">link</a>

当实际上没有可运行的javascript(如您的示例)时,它什么也不做。


知道了 它有效地禁用了链接。
约翰·利弗莫尔

9

参考此:

<a href="Http://WWW.stackoverflow.com">Link to the website opened in different tab</a>
<a href="#MyDive">Link to the div in the page(look at the chaneged url)</a>
<a href="javascript:;">Nothing happens if there is no javaScript to render</a>

4
<a href="javascript:void(0);"></a>

javascript: 告诉浏览器要编写JavaScript代码


3

旧线程,但我想补充一点,开发人员使用此构造的原因不是创建无效链接,而是因为出于某些原因的javascript URL无法正确地将引用传递给活动html元素。

例如handler_function(this.id)onClick但不能用作javascript URL。

因此,您可以在编写符合专业标准的代码(涉及到您必须手动调整每个超链接的调用)或稍微非标准的代码(可以编写一次并在各处使用)之间进行选择。


2

因此,它通常用于在js代码中href而不是在事件监听器中编写js代码,onclick并避免使用#链接href来使a标记对html有效。

我研究了如何javascript:href属性内部使用。

<a href="
     javascript:
        a = 4;
        console.log(a++); 
        a += 2; 
        console.log(a++); 
        if(a < 6){ 
            console.log('a is lower than 6');
        } 
        else 
            console.log('a is greater than 6');
        function log(s){
            console.log(s);
        }
        log('function inplimentation working too');

">Click here</a>

通过此代码,您甚至可以在其中编写js代码,而不仅仅是调用函数。


已在Chrome 68.0.3440.106版(正式版)(64位)中进行了测试

在Firefox Quantom 61.0.1(64位)中经过测试


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.