防止锚行为

IT技术 javascript
2021-03-02 01:02:20

当我想阻止我使用的锚标记的默认行为时

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

哪个是最有效的解决方案?

6个回答

优雅降级解决方案的示例:

<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/

这也将用户带到无脚本页面,如果在发生错误时做的事情,或者如果用户点击该链接被分配听众面前。如果您确实打算让它们在 DOM 中紧接着一个接一个地出现,则后者不太可能发生,如您的示例所示,但这会抑制页面渲染速度以及中断验证(除非这在 HTML5 规范中有所更改?我不介意它!)通常,这些东西会在 DOMReady 中尽快分配,在某些情况下,这会为用户单击链接留下一个相当大的窗口。
2021-05-06 01:02:20

这是一个不错的方法,如果您使用 jquery,您还可以这样做:

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

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

preventDefault 也可用于防止提交表单

你也可以有这个:

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

如果您从不希望浏览器在任何地方跟随链接,我会说您拥有的是最简单、最安全的解决方案。

当然,您可以使用 javascript 应用许多其他解决方案,但大多数其他方法可能会失败

  • 如果事件是在 DOMReady 或之后分配的,则 DOM 未完全加载,这很常见。
  • 单击事件侦听器处理链接(这在您希望浏览器不跟随链接的情况下很常见)。如果在处理点击的 javascript 中发生错误,则可能在语句末尾return false;preventDefault将不会被执行,并且浏览器将跟随链接,如果只是到#

这是阻止这种情况的非常简单的方法。

( function( $ ) {
   $( 'a[href="#"]' ).click( function(e) {
      e.preventDefault();
   } );
} )( jQuery );
那是使用jQuery。他们没有说他们正在使用它,你也没有建议使用那个库。
2021-04-26 01:02:20