2011-07-07 59 views
2

在JavaScript中,我试图在链接被点击2秒后执行一个函数,并等到函数完成其执行之前去链接目标。一旦链接点击并setTimeout

/* JavaScript */ 
function myFunction() { /* Block of code, with no 'return false'. */ } 

<!-- HTML --> 
<a onclick="setTimeout(myFunction, 2000);" href="http://www.siku-siku.com">Link</a> 

的问题是用户点击后,浏览器会立即转到链接目标即myFunction没有时间来执行。我在这里错过了什么吗?

预先感谢。

回答

4

您需要return false从你的onclick事件,取消实际的浏览器处理页面加载。

既然你想要跟随链接(一旦功能完成),你将需要通过JavaScript来做到这一点。但是,你正在使用超时,所以你失去了参考点击的元素,所以我们需要传递,太多的方法(如果你想要这个逻辑用于多个链路

HTML

<a onclick="return createTimedLink(this, myFunction, 2000);" href="http://www.siku-siku.com">Link</a> 

的JavaScript

function createTimedLink(element, callback, timeout){ 
    setTimeout(function(){callback(element);}, timeout); 
    return false; 
} 

function myFunction(element) { 
/* Block of code, with no 'return false'. */ 
    window.location = element.href; 
} 

演示在http://jsfiddle.net/gaby/mdkjX/2/

+0

谢谢!这非常明确,它服务于我所需要的。 – moey

+0

另外,谢谢你的链接到jsfiddle.net – moey

+0

没问题@siku :) –

-1

是的,链接的默认行为是由浏览器发送的GET请求。想象一下,在注册处理程序之前,浏览器已经注册了另一个处理程序来启动获取请求(只是虚构的)。这里就是这种情况。你应该在你的内联处理程序返回false:

onclick = '(function(){ setTimeout(yourFunction, 2000); return false;})()' 

以上简单:

onclick = 'setTimeout(yourfunction, 2000); return false;' 

更新:

使用此(它需要的jQuery):

$(function() { 
     $('a').click(function (e) { 
      e.preventDefault(); 
      var target = $(this).attr('href'); 
      setTimeout('go("' + target + '")', 2000); 
     }); 
    }); 
    function go(target) { 
     console.log('2 seconds passed'); 
     document.location = target; 
    } 
+0

我只是试了一下,浏览器仍然立即去了链接目的地。另外,通过'return false',我们是不是实际上告诉浏览器_不跟踪链接? – moey

2
<a onclick="setTimeout(myFunction, 2000);" href="#">Link</a> 

J AVASCRIPT

function myFunction(){ 
////your other code 
/// 
/// 
window.location="http://www.siku-siku.com";//at the end 

} 

demo here

相关问题