从链接中删除“可点击性”(锚点标记)

问题描述:

我有几个链接,在发送响应之前需要几秒钟来处理,所以我想实现一个指示器图标。这里是我的起点:从链接中删除“可点击性”(锚点标记)

<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); 
} 

所以,问题是,我怎么能点击它删除一个链接(锚)的“可点击”?

+0

您是否尝试在点击事件处理程序中返回false?我应该这样做。 – ldionmarcil 2013-02-14 17:41:10

+1

禁用默认事件['event.preventDefault'](https://developer.mozilla.org/en-US/docs/DOM/event.preventDefault)并自己处理它(您也应该将光标外观更改为'默认“,当你禁用链接)。 – steveax 2013-02-14 17:44:12

+0

@steveax这是否意味着我也必须自己处理锚点目标查找? - 另外,光标已经变回,并且当我第二次单击时,href不再被设置。 – codecab 2013-02-14 17:50:11

有了这个代码,您可以从打开的链接锚停止:

$('a').on('click', function(e){ 
    e.preventDefault(); 
}); 
+0

,看起来非常像jquery。 OP似乎在使用香草。 – Popnoodles 2013-02-14 17:45:37

+0

你正确的修复它看起来更好:P – 2013-02-14 17:49:06

+0

它仍然看起来非常像jQuery! – Popnoodles 2013-02-14 17:50:13

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

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

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

有人会说使用返回false,有时不错,但不是最好的主意。 event.preventDefault() vs. return false

+0

在我的情况下,e实际上是我点击的元素..所以没有e.preventDefault() – codecab 2013-02-14 17:56:20

+0

哦,也许不是... – Popnoodles 2013-02-14 18:06:57

+0

...现在它确实 – Popnoodles 2013-02-14 18:15:05