如何防止点击“#”链接跳转到页面顶部?
我目前正在使用<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() });
这种方式是有针对性的,并没有影响页面上的其他事情。