HREF链接没有任何目标,不想使用hash或void(0)

Mat*_*tis 8 html javascript jquery

我有一个链接,我希望能够单击以触发一段jQuery代码.

目前我有

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

$('#foo').click(function(){
  // Do stuff
});
Run Code Online (Sandbox Code Playgroud)

效果很好.但是,我一直讨厌以这种方式使用哈希.页面闪烁,散列被添加到页面URL.

一种替代方案是使用

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

但我也不喜欢在浏览器状态栏中看到这段代码.它看起来很俗气.


我宁愿拥有的是一个解释性的javascript占位符,它什么都不做,比如

<a href="javascript:zoom();" id="foo">Link</a>
Run Code Online (Sandbox Code Playgroud)

实际上有效,但在javascript控制台中抛出一个ReferenceError,因为没有这样的功能.什么是无效的函数的最小定义?

还有其他选择吗?

我应该跳过链接并使用类似的东西

<span id="foo" style="cursor:pointer;cursor:hand;">Link</span>
Run Code Online (Sandbox Code Playgroud)

代替?

use*_*716 15

使用event.preventDefault()[docs]方法.

$('#foo').click(function(e){

   e.preventDefault();
  // Do stuff
});
Run Code Online (Sandbox Code Playgroud)

这样可以防止哈希在单击时产生任何影响.或者去除散列,并使用CSS来设置它的样式.

此外,您可以提供一个实际的URL href来处理优雅的降级.


什么是无效的函数的最小定义?

这是一个无操作功能:

var noop = function(){};
Run Code Online (Sandbox Code Playgroud)

...或者因为你正在使用jQuery,你可以使用jQuery.noop()[docs]方法,它也只是一个空函数.

$.noop
Run Code Online (Sandbox Code Playgroud)

  • +1:请注意,通过此答案,您可以保持哈希标记和页面不会闪烁.javascript:void(0)被删除. (2认同)