使用空href创建<a>链接的最佳方法

Joh*_*ohn 36 html javascript css jquery html5

我想创建一个链接,并使用javaScript强制链接锚点,我尝试了以下内容: -

<a id="ServerSort" href="#" style="text-decoration:underline">
Run Code Online (Sandbox Code Playgroud)

它运作良好,但点击<a>链接后页面将失去当前位置.

我需要链接有一个href,因为我需要鼠标来更改光标吗?

谁有人建议?

Tus*_*har 41

您可以使用 javascript:void(0)

<a id="ServerSort" href="javascript:void(0)">
Run Code Online (Sandbox Code Playgroud)

你不需要King King的style="text-decoration:underline"评论


通过jQuery你可以通过event.preventDefault()来做到这一点

停止事件的默认操作.

$('#ServerSort').click(function(event){
   event.preventDefault(); //or return false;
});
Run Code Online (Sandbox Code Playgroud)

  • @jsumners 而且我也**同意它不会创建有效链接**,明白吗?看起来**你没有理解我之前的评论**。对于 OP 的要求,他 **显然** 不想要一个有效的链接(从他的评论中 **... 使用 javaScript 强制链接锚点... **),他想要点击链接会运行一些脚本,所以使用 `javascript:` 前缀是正确的选择,虽然它可能不是最好的,因为我们可以使用另一个元素并模仿链接,而使用 `javascript:` 前缀将需要内联脚本,这是不推荐的。 (3认同)
  • @jsumners它只是无效创建一个有效的链接,但当然使用`javascript:`前缀不会创建任何有效的链接,它只是看起来像一个链接,它允许你点击运行一些脚本,在这种情况下它点击时什么都不做.在锚点上使用`javascript:`前缀的功能是由几乎主要的浏览器实现的,我相信它仍然会得到支持. (2认同)

Ben*_*ene 21

最好的方法是将href设置为#0这样:

原因如下:你永远不会在ID为0的页面上有任何东西(如果你这样做,反正存在问题),并且由于#0不存在,click事件不会让你回到页面顶部.您不需要JavaScript来执行此操作,也不应使用JavaScript.


Jam*_*ers 6

 .clickable {
   cursor: pointer;
 }
Run Code Online (Sandbox Code Playgroud)
 <a id="ServerSort" class="clickable">Foo</a>
Run Code Online (Sandbox Code Playgroud)

  • 因此,为什么我提到“如果您只需要一个指针...”:) 如果稍后可能需要 href,请绝对保留为锚点。 (2认同)

Ara*_*ray 6

使用Event.preventDefault()

此方法告诉用户代理,如果事件没有得到显式处理,则不应像通常那样采取其默认操作。

function clickme(ev) {
  alert('You stay here!')
  ev.preventDefault()
}
Run Code Online (Sandbox Code Playgroud)
<a onclick='clickme(event)' href='https://www.google.com/'>https://www.google.com</a>
Run Code Online (Sandbox Code Playgroud)

事件继续照常传播,除非其事件侦听器之一调用stopPropagation()stopImmediatePropagation(),其中任一事件立即终止传播。


或者,您可以使用onclick='return false'(内联或在函数中)。它将阻止默认浏览器行为(更多信息):

function clickme() {
  alert('You stay here!');
  return false;
}
Run Code Online (Sandbox Code Playgroud)
<a href="https://www.google.com/" onclick='return clickme()'>https://www.google.com/</a>
Run Code Online (Sandbox Code Playgroud)

不过,这种方法可以防止事件传播。更多细节


jus*_*nne 5

存在几个选项:

<a id="ServerSort" href="javascript:">

<a id="ServerSort" href="javascript://">

<a id="ServerSort" href="javascript:void(0)">
Run Code Online (Sandbox Code Playgroud)

这些被认为是不好的做法,我永远不会推荐这样的东西用于生产。当链接到开发阶段不存在的页面时,我通常使用第一个选项。

最好,我根本不会使用 a,我在下面的示例中切换到一个跨度:

<span id="ServerSort" onclick="return false">Test Link</span>
Run Code Online (Sandbox Code Playgroud)

并相应地设置元素的样式:

    <style type="text/css">
    #ServerSort {
        text-decoration:underline;
    }
        #ServerSort:hover {
            color:red;
            cursor:pointer;
        }
</style>
Run Code Online (Sandbox Code Playgroud)

我正在内嵌 js,只是在这里手写一个来展示一种不同的方法,它避免了覆盖默认行为的需要。