2011-07-07 99 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

相關問題