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

我目前正在使用<a>标签与jQuery发起像点击事件等事情

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

但我讨厌'#'如何让页面跳转到页面顶部。 我能做些什么呢?

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

 $('a.someclass').click(function(e) { // Special stuff to do when this link is clicked... // Cancel the default action e.preventDefault(); }); 

所以这是旧的,但…以防万一有人在search中发现这一点。

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

你甚至可以这样写:

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

即时通讯不知道它是一个更好的方式,但它是一种方式:)

你可以使用event.preventDefault()来避免这种情况。 在这里阅读更多: http : //api.jquery.com/event.preventDefault/ 。

只要使用<input type="button" />而不是<a>并使用CSS来设置它看起来像一个链接,如果你想。

button专门用于点击,而不需要任何href属性。

最好的方法是使用onload动作来创buildbutton,并通过javascript将其附加到需要的位置,所以在禁用javascript的情况下,它们将不会显示,也不会混淆用户。

当您使用href="#"您会看到大量不同的链接指向相同的位置,当代理不支持JavaScript时,这将不起作用。

如果你想使用锚点,你可以使用http://api.jquery.com/event.preventDefault/,就像build议的其他答案一样。;

您也可以使用任何其他元素,如跨度,并附加单击事件。

 $("span.clickable").click(function(){ alert('Yeah I was clicked'); }); 

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

 <a href="#0" class="someclass">Text</a> 

解决scheme#1:

 <a href="#!" class="someclass">Text</a> 

解决scheme2:

 <a href="javascript:void(0);" class="someclass">Text</a> 

解决scheme#3:

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

只是使用

 <a href="javascript:;" class="someclass">Text</a> 

JQUERY

 $('.someclass').click(function(e) { alert("action here"); } 

如果元素没有有意义的href值,那么它不是一个真正的链接,那么为什么不使用其他元素呢?

正如Neothor所build议的那样,一个跨度是恰当的,如果样式正确的话,它将显而易见地是一个可以被点击的项目。 您甚至可以附加一个hover事件,使用户的鼠标在其上方移动时,元件“点亮”。

然而,说到这一点,您可能需要重新考虑您的网站的devise,以便它在没有JavaScript的情况下运行,但是在可用时通过javascript进行了增强。

我用过:

 <a href="javascript://nop/" class="someClass">Text</a> 

如果你想迁移到同一页面上的锚点部分,而不跳页,使用:

只需使用“#/”而不是“#”,例如

 <a href="#/home">Home</a> <a href="#/about">About</a> <a href="#/contact">contact</a> page will not jump up on click.. 
 $('a[href="#"]').click(function(e) {e.preventDefault(); }); 

您可以传递一个没有href属性的锚标签,并使用jQuery来执行所需的操作:

<a class="foo">bar</a>

处理你的jquery后,你也可以返回false。

例如。

 $(".clickableAnchor").live( "click", function(){ //your code return false; //<- prevents redirect to href address } ); 

我使用这样的东西:

 <a href="#null" class="someclass">Text</a> 

与href =“#”的链接几乎总是被replace为一个button元素:

 <button class="someclass">Text</button> 

使用带有href =“#”的链接也是一个可访问性问题,因为这些链接对屏幕阅读器是可见的,它将读出“链接 – 文本”,但是如果用户点击它将不会去任何地方。

为了防止页面跳转,您需要调用e.stopPropagation(); 在调用e.preventDefault();

stopPropagation可防止事件发生在DOM树上。 更多信息在这里: https : //api.jquery.com/event.stoppropagation/

我一直使用:

 <a href="#?">Some text</a> 

当试图阻止页面跳转时。 不知道这是否是最好的,但似乎多年来一直运作良好。

在'#'之后添加一些内容将页面焦点设置为具有该id的元素。 最简单的解决scheme是使用'#/',即使你正在使用jQuery。 但是,如果你正在处理jQuery中的事件,event.preventDefault()是要走的路。

#/技巧的作品,但添加一个历史事件的浏览器。 所以,点击返回不起作用,因为用户可能希望/期望它。

$('body').click('a[href="#"]', function(e) {e.preventDefault() }); 是我去的方式,因为它适用于已经存在的内容,以及加载后添加到DOM的所有元素。

具体来说,我需要在一个.btn-group (Reference)的引导下拉菜单中做到这一点,所以我做了:

$('body').click('.dropdown-menu li a[href="#"]', function(e) {e.preventDefault() });

这种方式是有针对性的,并没有影响页面上的其他事情。