如何使锚标记什么都没有引用?


159

我使用jQuery,我需要使一些锚标记不执行任何操作。

我通常这样写:

<a href="#">link</a>

但是,这是指页面的顶部!


因为jquery会处理click事件,所以我希望链接像achor链接,但表现得像JavaScript函数一样
ahmed


1
如以下答案之一所述:如果您不希望链接指向资源,则不要使用A元素。
Mathias Bynens 09年

不要href在其中使用该属性。
vsync

Answers:


103

如果您不希望它指向任何内容,则可能不应该使用<a>(anchor)标签。

如果您希望某些东西看起来像一个链接,但不像一个链接,则最好使用适当的元素(例如<span>),然后使用CSS设置其样式:

<span class="fake-link" id="fake-link-1">Am I a link?</span>

.fake-link {
    color: blue;
    text-decoration: underline;
    cursor: pointer;
}

另外,假设您已将此问题标记为“ jQuery”,那么我假设您想附加一个click事件处理程序。如果是这样,请执行与上述相同的操作,然后使用类似以下JavaScript的代码:

$('#fake-link-1').click(function() {
    /* put your code here */
});

37
这有一个问题:它不允许标签导航。

6
请注意(如Iraimbilanja所指出的),此处的span方法禁用了使用键盘调用该功能的可能性,我认为这是可用性问题。
弗雷德里克·莫尔克(FredrikMörk)2009年

3
也是可访问性问题。您可以通过使用button元素(由JavaScript生成,这样非JS用户不会受到损坏的控件)来解决该问题。
昆丁

4
这是一个快速解决方案:非链接元素上的tabindex =“ 0”将在大多数现代浏览器中启用键盘导航。
Mathias Bynens,2009年

1
另一个“问题”是您不使用CSS:hover伪类不适用于IE6中不是链接的元素。但是,由于无论如何(至少应该)都是通过JavaScript添加这些元素的,因此,您最好编写一个脚本,将鼠标悬停时将.hover类添加到该元素。
Mathias Bynens 09年

268

有一些不完美的解决方案:

1.链接到假锚

<a href="#">

问题:单击链接将跳回到页面顶部

2.使用'a'以外的标签

使用span标签并使用jquery处理点击

问题:中断键盘导航,必须手动更改悬停光标

3.链接到javascript void函数

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

问题:在IE中链接图像时中断

由于所有这些都有其问题,因此我确定的解决方案是链接到假锚,然后从onClick方法返回false:

<a href="#" onClick="return false;">

不是最简洁的解决方案,而是解决了上述方法的所有问题。


2
我通常使用javascript:void(0); 方法,因为使用#将鼠标悬停在Firefox的栏中显示当前URL,这可能会误导用户。
lucaferrario

8
breaks when linking images in IE这是什么意思?
尤金

14
@eugene这个问题现在已经3岁了,但是IE用于使图像在被void函数链接包围时消失。不知道什么时候修复的,但是它可以在IE10中工作,这就是我已经安装的全部。我现在个人使用<a href="javascript:;">
zaius

1
我也在其中使用了注释:<a href="javascript:void(0);//显示属性面板">。这样,当用户将鼠标悬停时,他们会看到评论,这可以提示他们单击时的期望。(尽管您也可以使用工具提示。)
Robin Zimmermann 2014年

5
似乎href="javascript:"也足够,并且可以在最新的主要浏览器中使用。不需要分号,实际上PhpStorm甚至建议删除它。
jlh

40

要使其完全不执行任何操作,请使用以下命令:

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

1
或者只是<a href="javascript:;">。PS不工作,target=_blank虽然
亚历克斯

36

处理此问题的正确方法是在处理链接时使用jQuery“断开”链接

的HTML

<a href="#" id="theLink">My Link</a>

JS

$('#theLink').click(function(ev){
    // do whatever you want here

    ev.preventDefault();
    ev.stopPropagation();
});

最后两个呼叫将停止浏览器解释点击。


5
虽然这听起来像是“适当的”,因为它停止了事件冒泡,但是“ return false”的冗长程度要低得多,并且可以执行相同的操作。唯一要做的是,如果您已经注册了事件处理程序,以通过jQuery单击链接。
09年

25

有很多方法可以做到

不添加href属性

<a name="here"> Test <a>

您可以添加onclick事件而不是href

<a name="here" onclick="YourFunction()"> Test <a>

或者您可以像这样添加void函数,这将是最好的方法

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

名称属性是必需的吗?
Petrus Theron

@PetrusTheron不需要。。
Punit Gajjar

这是预先存在的答案的
窃-Aross

1
如果您删除了href属性,请不要忘记设置锚标记的样式,因为它不再像超链接那样运行(即使onclick仍然起作用),您将不得不重置诸如cursor: pointer;:hover选择器之类的东西。
Partack

@Partack正确..感谢您的注意
Punit Gajjar

24

没什么意思

<a href='about:blank'>blank page</a>

要么

<a href='whatever' onclick='return false;'>won't navigate</a>

1
同意-只需从jQuery方法中返回false,瞧,它就
无处可寻

14

我想你可以尝试

<a href="JavaScript:void(0)">link</a>

我在这里看到的唯一问题是执行JavaScript时可能会提示高级浏览器安全性。

尽管这是比以下方法更容易的方法之一

<a href="#" onclick="return false;">Link</a>

这应该谨慎使用

阅读本文以获得一些建议https://web.archive.org/web/20090301044015/http://blog.reindel.com/2006/08/11/a-hrefjavascriptvoid0-avoid-the-void


正确答案,允许标签导航。
K-SO的毒性在增加。

14

该答案应进行更新以反映新的Web标准(HTML5)。

这个:

<a tabindex="0">This represents a placeholder hyperlink</a>

...是有效的HTML5。tabindex属性使它可以像普通超链接一样在键盘上聚焦。您最span好像前面提到的那样使用该a元素,但是我发现使用该元素更为优雅。

参见:https : //w3c.github.io/html-reference/a.html
和:https : //html.spec.whatwg.org/multipage/links.html#attr-hyperlink-href


1
这也是有效的HTML4,但不会将锚定为链接样式。
interjay 2013年

1
我不知道它是有效的html4,但是HTML5规范明确提到了用例。不以href属性为目标的样式也可以正常工作,只是默认的浏览器样式可能是个问题。
2013年

1
click当用户聚焦元素并按Enter键(在Firefox 51中测试)时,这也不会触发事件。
torvin

@torvin,很简单。使用keydown事件。
2016年

时髦的怪癖,但在窗口10中,它在元素周围添加了带边框的框
1-14x0r

12

以下是<a>标记的href标记属性不引用的三种方式:

<a href="JavaScript:void(0)"> link </a>

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

<a href="#" onclick="return false;"> Link </a>

1
这仅仅是一个重复当前最高的投票答案,但较少的信息
aross

5

我知道这是一个老问题,但我想还是要加上两分钱:

这取决于链接将要执行的操作,但是通常,我会将链接指向可能显示/执行相同操作的网址,例如,如果您要弹出一些关于box的信息:

<a id="about" href="/about">About</a>

然后用jQuery

$('#about').click(function(e) {
    $('#aboutbox').show();
    e.preventDefault();
});

这样,非常老的浏览器(或禁用了JavaScript的浏览器)仍可以导航到单独的“关于”页面,但是更重要的是,Google也会对此进行选择并抓取“关于”页面的内容。


5

确保要停止的所有链接都具有href="#!"(或确实要停止的任何链接),然后使用此链接:

jq('body').on('click.stop_link', 'a[href="#!"]',
function(event) {
     event.preventDefault();
});

4

您可以具有a不带href属性的HTML锚(标记)。离开href属性,它将不会链接到任何内容:

<a>link</a>

谢谢!这完全适合我的情况。我希望在有URL的情况下在新选项卡中打开Anchor标记的地方,但在没有URL的情况下什么也没有。如果是#,则表示接受“单击”并将其移到页面顶部。没有您建议的href部分。它解决了问题!由于使用了标签,格式化看起来很棒,点击问题就没有href了。谢谢!!!
Mohsin

1
如果其他任何人都在考虑它是否为HTML5有效,则答案为是:) stackoverflow.com/a/33046203/5323892 。以下是来自标准页面的示例(请参阅第3个li项目):<nav> <ul> <li> <a href="https://stackoverflow.com/">首页</a> </ li> <li> <a href =“ / news“>新闻</a> </ li> <li> <a>示例</a> </ li> <li> <a href="https://stackoverflow.com/legal">法律</a> </ li> </ ul> </ nav>
Mohsin

它可以工作,但是如果您希望将鼠标指针更改为手指,只需按照@Rutesh Makhijani的答案中的建议添加href =“ JavaScript:void(0)”。
塔里克

3

唯一对我有用的是上述各项的组合:

首先是ul

<li><a onclick="LoadTab2_1()" href="JavaScript:void(0)">All Assigned</a></li>

然后在LoadTab2_1中,我手动切换了选项卡div

$("#tabs-2-1").hide();
    $("#tabs-2-2").show();

这是因为的断开也会断开选项卡中的操作

您还需要在主标签页更改内容后手动进行标签页样式设置

$("#secTab1").addClass("ui-tabs-active").addClass("ui-state-active").addClass("ui-state-hover").addClass("ui-state-focus");
    $("#secTab1 a").css("color", "#ffffff");


1
<a href="#" onclick="SomeFunction()"  class="SomeClass">sth.</a>

这是我的锚标签。因此,在onClick =“”事件上返回false此处无效。我刚刚删除了href =“#”属性,它对我一样有效,如下所示

<a onclick="SomeFunction()"  class="SomeClass">sth.</a>

我需要添加此CSS。

.SomeClass
{
    cursor: pointer;
}

你这是什么意思。推荐什么,为什么?
Burk

它很好的做法,以保持JavaScript和HTML在不同的文件,这里有一个详细的解答:stackoverflow.com/questions/5871640/...
亚历山德鲁·塞韦林

1

我在WordPress网站上遇到此问题。下拉菜单上的标题始终具有属性,href=""并且仅使用允许标准URL的标题插件。最简单的解决方案是在页脚中运行以下代码:

jQuery('[href=""]').click(function(e){
    e.preventDefault();
});

这将防止空白锚执行任何操作。


0

React不再支持href="javascript:void(0)"在锚标记中使用类似这样的功能,但这在某些情况下效果很好。

<a href="#" onClick={() => null} >link</a>

-1

我知道这被标记为jQuery问题,但是您也可以使用AngularJS回答。

在您的元素中,添加ng-click指令,并使用$ event变量(即click事件)...防止其默认行为:

<a href="#" ng-click="$event.preventDefault()">

您甚至可以将$ event变量传递给函数:

<a href="#" ng-click="doSomething($event)">

在该函数中,您可以对click事件进行任何操作。

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.