如何防止点击"#"链接跳转到页面顶部?

st4*_*l0w 197 html javascript jquery

我目前正在使用<a>带有jQuery的标签来启动点击事件等.

例子是 <a href="#" class="someclass">Text</a>

但是我讨厌'#'如何使页面跳到页面顶部.我该怎么做?

小智 285

所以这是旧的但是......以防万一有人在搜索中发现这一点.

只需使用"#/"而不是"#"页面不会跳转.

  • 这是有效的,因为它导航到名为`/`的锚,而不是因为`#/`有任何意义.你可以用`#whateveryouwant`做同样的事情,它会阻止跳到顶部 (47认同)
  • 注意 - 这会在浏览器历史记录中创建一条记录,因此在单击带有"#/"或其他任何内容的链接后,单击后退将不会执行用户认为会执行的操作,例如`#whatever`. (19认同)
  • 这需要是最好的答案.Tnank你. (3认同)
  • @slang,虽然你是对的,这只是吹毛求疵,但我更喜欢使用“#/”而不是“#whateveryouwant”,因为“#/”的使用非常普遍,因此可以揭示意图(干净的代码)。不过,它仍然可以作为答案的补充。 (3认同)
  • 确切地说我需要什么!在你发表评论一年之后,这对我很有帮助,谢谢Chris (2认同)

Bol*_*ock 230

在jQuery中,当你处理click事件时, 返回false以阻止链接以通常的方式响应防止默认操作(即访问href属性)发生(根据PoweRoy的评论和Erik的回答):

$('a.someclass').click(function(e)
{
    // Special stuff to do when this link is clicked...

    // Cancel the default action
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

  • 而不是返回false,请执行event.preventDefault().对于将阅读您的代码的人来说,这一点更为明确. (7认同)
  • @BoltClock OP应该使用按钮来处理点击事件而不是锚点.你的答案非常有用,但是当href指向某个地方并且你现在不需要重定向*时.防止根本不需要的动作的默认行为是一种建议,例如:拿刀,抓住刀片并使用手柄锤击钉子:)为工作采取正确的工具! (5认同)
  • @takeshin:你是对的.给你答案+1 :) (2认同)
  • 如果jquery:`$('a[href=#]').click(function(e) { e.preventDefault(); });` (2认同)

guy*_*ler 58

你甚至可以像这样写它:

<a href="javascript:void(0);"></a>
Run Code Online (Sandbox Code Playgroud)

我不确定它是一个更好的方式,但它是一种方式:)

  • 你可能是正确的但是..在这种情况下它很重要因为他正在给一个onclick事件所以在新标签中打开链接无论如何都无法工作...... (7认同)

Nab*_*.Z. 28

解决方案#1 :(普通)

<a href="#!" class="someclass">Text</a>
Run Code Online (Sandbox Code Playgroud)

解决方案#2 :(需要javascript)

<a href="javascript:void(0);" class="someclass">Text</a>
Run Code Online (Sandbox Code Playgroud)

解决方案#3 :(需要jQuery)

<a href="#" class="someclass">Text</a>
<script>
$('a.someclass').click(function(e) {
    e.preventDefault();
});
</script>
Run Code Online (Sandbox Code Playgroud)

  • 第一个解决方案是完美的。简短,干净,简单。这应该是公认的答案。谢谢! (3认同)

Eri*_*ärd 14

你可以event.preventDefault()用来避免这种情况.点击此处了解更多信息:http://api.jquery.com/event.preventDefault/.


tak*_*hin 10

如果您愿意,只需使用CSS <input type="button" />代替<a>并使用CSS将其设计为链接.

按钮专门用于单击,它们不需要任何href属性.

最好的方法是使用onload操作来创建按钮,并通过javascript将其附加到您需要的位置,因此在禁用javascript的情况下,它们根本不会显示,也不会混淆用户.

当您使用时href="#",会有大量不同的链接指向同一位置,当代理不支持JavaScript时,这些链接将不起作用.


Neo*_*hor 8

如果您想使用锚,可以像建议的其他答案一样使用http://api.jquery.com/event.preventDefault/.

您还可以使用任何其他元素(如span)并将click事件附加到该元素.

$("span.clickable").click(function(){
alert('Yeah I was clicked');
});
Run Code Online (Sandbox Code Playgroud)


Vev*_*eve 7

您可以使用#0href,因为0不允许作为id,页面不会跳转.

<a href="#0" class="someclass">Text</a>
Run Code Online (Sandbox Code Playgroud)


Exi*_*stX 6

有4种类似的方法可以在没有任何JavaScript的情况下防止页面跳转到顶部:

选项1:

<a href="#0">Link</a>
Run Code Online (Sandbox Code Playgroud)

选项2:

<a href="#!">Link</a>
Run Code Online (Sandbox Code Playgroud)

选项 3:

<a href="#/">Link</a>
Run Code Online (Sandbox Code Playgroud)

选项 4(不推荐):

<a href="javascript:void(0);">Link</a>
Run Code Online (Sandbox Code Playgroud)

event.preventDefault()但如果您在 jQuery 中处理点击事件,则最好使用。

  • 虽然此代码可以回答问题,但提供有关如何和/或为何解决问题的附加上下文将提高​​答案的长期价值。 (3认同)

小智 5

$('a[href="#"]').click(function(e) {e.preventDefault(); });
Run Code Online (Sandbox Code Playgroud)

  • 你能补充一个简短的解释吗? (3认同)