2012-05-02 27 views
1

可能重複:
How to tell browser to stay on current window如何延遲元素在JavaScript的onclick響應

我可以延遲的元素的onclick行動。我有一個在onclick事件中調用函數的元素。我如何延遲對該功能的呼叫?我想告訴瀏覽器在執行onclick動作之前停止兩秒鐘。

元素看起來像這樣。

<div id="id01" class="channel" onclick="load_window('http://www.ewtn.com')"><a>EWTN.com</a></div><br/>EWTN television network</div> 

如果我在load_window函數內放置了一個setTimeout,瀏覽器會將window.open當作一個彈出窗口並將其停止。所以我想以不同的方式提出這個問題。有沒有辦法告訴瀏覽器在執行onclick之前等待?在該元素的.click中,我有執行其他功能的代碼。

$('.channel').click(function() { 
     $(this).addClass("selected"); 
     show_layer(); 
     setInterval("refresh_caption()",300000); 
    }); 

我期待延遲對load_window()的調用,同時仍然將該操作作爲用戶操作由瀏覽器處理。

回答

0

不,沒有可行的方法來延遲執行當前正在運行的JavaScript線程,而不會掛起瀏覽器那段時間。

你可以在一個緊密的循環中循環,直到2秒過去,然後做你的彈出式的事情,但這將是一個可怕的用戶體驗,並且一些瀏覽器可能會因爲它沒有響應性而放棄你的腳本。我不會推薦這個。這是一個糟糕的設計。

稍後執行一些代碼通常是通過setTimeout()完成的,但是您已經表示您不希望將其用於彈出的原因。

如果你想解釋你真的想解決什麼問題,或許我們可以提供其他方法來解決這個問題。

3

快速而骯髒的方法是創建一個新函數,爲load_window調用包裝一個超時值,並將該新函數設置爲onclick的值。

function channel_click(){ 

    // anon wrapper function, 2 second delay 
    setTimeout(function() { 
     load_window('http://www.ewtn.com'); 
    } , 2000); 

} 

然後

<div id="id01" class="channel" onclick="channel_click()"><a>EWTN.com</a></div><br/>EWTN television network</div> 

不知道你的load_window功能實際上是做什麼的,所以我不能說發生了什麼之後2秒之後。

再一次,這是特定於您提供的示例。如果您需要更通用的方法,則必須提供更多信息。