2010-12-08 30 views
26

当我想阻止锚标签我真的的默认行为使用防止锚行为

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

这是最有效的解决方案?

回答

19

一个优雅有辱人格的解决方案的例子:

<a href="no-script.html" id="myLink">link</a> 

<script> 
document.getElementById("myLink").onclick = function() { 
    // do things, and then 
    return false; 
}; 
</script> 

演示:http://jsfiddle.net/karim79/PkgWL/1/

+0

如果* do things *中出现错误,或者用户在分配侦听器之前单击该链接,这也会使用户进入无脚本页面。如果你真的打算让它们在DOM中紧跟在一起,那么后者不太可能发生,就像在你的例子中那样,但是这会抑制页面渲染速度,并且破坏验证(除非在HTML5规范中这被改变了?我不介意这是否是!)通常情况下,这些东西都是在DOMReady中最快分配的,这在某些情况下会为用户留下一个相当大的窗口来点击链接。 – 2010-12-08 13:04:31

10

你也可以有这样的:

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

这是一个很好的方法,如果你使用jQuery,你也可以这样做:

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

<script type="text/javascript"> 
    $("#link").click(function(ev) { 
     ev.preventDefault(); 
    }); 
</script> 

的preventDefault可能是有用的还可以防止提交表单

9

如果你不希望浏览器跟随任何地方的链接,我会说你得到的是最简单,最安全的解决方案。

当然,也有其他的解决方案的堆,你可以使用JavaScript的应用,但是当

  • DOM是不完全加载,如果该事件被分配在domready中或更高版本,这是大多数其他方式可能会失败,共同。
  • 点击事件侦听器处理链接(这是常见的地方,你希望链接不被浏览器所遵循)。如果在处理点击的javascript中发生错误,则可能在语句末尾的return false;preventDefault将不会执行,并且浏览器将跟随该链接(如果仅限于#)。
1

这是非常简单的方法来阻止这一切。

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