3

我有几个链接,在发送响应之前需要几秒钟来处理,所以我想实现一个指示器图标。这是我的出发点:

<a href="/foo"><img src="icon.png" /></a>

这是一个遗留应用程序,代码已经是一团糟,所以我不介意并使用内联事件处理程序:

<a href="/foo"><img src="icon.png" onclick="indicate(this)" /></a>

此外,没有绑定 JS 框架。我可以使用其他一些机制来应用事件处理程序,但这不会改变我要解决的问题。

由于后端处理消耗大量资源,我希望防止用户多次点击。我试图在第一次点击时删除 href 属性。看来,通过使用超时,在发送请求后会正确删除 href,但是 firefox 和 IE9 都允许我再次单击该链接。

这是指示()函数:

function indicate(e) {
    if (indicator.ref.nodeName) indicateStop();

    // save state
    indicator.ref = e;
    indicator.orig.href = indicator.ref.parentNode.href;
    indicator.orig.src = indicator.ref.src;

    // replace icon
    indicator.ref.src = indicator.src;

    // remove href
    setTimeout(function(){ indicator.ref.parentNode.removeAttribute("href"); }, 20);
}

所以问题是,如何通过单击链接(锚点)从链接(锚点)中删除“可点击性”?

4

2 回答 2

0

使用此代码,您可以阻止锚点打开链接:

$('a').on('click', function(e){
  e.preventDefault();
});
于 2013-02-14T17:44:19.110 回答
-1
<a id="indicate" href="/foo"><img src="icon.png" /></a>

document.getElementById('indicate').addEventListener('click', indicate, false);

function indicate(e) {
    e.preventDefault();
}

有些人会说使用 return false,这有时很好,但并不总是最好的主意。 event.preventDefault() 与返回 false

于 2013-02-14T17:48:08.873 回答