从链接中删除“可点击性”(锚点标记)
我有几个链接,在发送响应之前需要几秒钟来处理,所以我想实现一个指示器图标。这里是我的起点:从链接中删除“可点击性”(锚点标记)
<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);
}
所以,问题是,我怎么能点击它删除一个链接(锚)的“可点击”?
有了这个代码,您可以从打开的链接锚停止:
$('a').on('click', function(e){
e.preventDefault();
});
,看起来非常像jquery。 OP似乎在使用香草。 – Popnoodles 2013-02-14 17:45:37
你正确的修复它看起来更好:P – 2013-02-14 17:49:06
它仍然看起来非常像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
在我的情况下,e实际上是我点击的元素..所以没有e.preventDefault() – codecab 2013-02-14 17:56:20
哦,也许不是... – Popnoodles 2013-02-14 18:06:57
...现在它确实 – Popnoodles 2013-02-14 18:15:05
您是否尝试在点击事件处理程序中返回false?我应该这样做。 – ldionmarcil 2013-02-14 17:41:10
禁用默认事件['event.preventDefault'](https://developer.mozilla.org/en-US/docs/DOM/event.preventDefault)并自己处理它(您也应该将光标外观更改为'默认“,当你禁用链接)。 – steveax 2013-02-14 17:44:12
@steveax这是否意味着我也必须自己处理锚点目标查找? - 另外,光标已经变回,并且当我第二次单击时,href不再被设置。 – codecab 2013-02-14 17:50:11