簡體   English   中英

多次觸發時運行一次js功能

[英]Run js function once when fired more than once

我有一個使用jQuery加載帶有javascript函數的文件/內容的Div。

function DoWork() {
    // Do Stuff
}

假設用戶可以重新加載Div並使用相同的js函數DoWork()拉出相同的文件/內容。 問題是,當重新加載文件時,先前加載的函數DoWork()仍在運行。 如何殺死先前解雇的DoWork()並重新啟動它?

Javascript是單線程的,這意味着在給定時刻只能執行一件事。 如果DoWork已經“運行”,那么要么a)阻止所有其他JS代碼,你別無選擇,只能讓它完成,因為你無法執行任何中斷代碼,直到它自己完成,或者b) DoWork被安排通過setTimeout()setInterval()在一個間隔上觸發。

如果是后一種情況,則setTimeout()setInterval()返回一個ID。 將ID存儲在某處,並根據啟動方式調用clearTimeout(doWork_timeout_id)clearInterval(doWork_interval_id)

您可以構建一個使用:setTimeout的簡單函數,然后每次調用DoWork將首先調用:clearTimeout。 我真的不喜歡這個解決方案,因為你會在setTimeout上浪費CPU。 所以另一種選擇是在DoWork中使用Web worker(如果你在另一個線程中運行大數據的話,它將為你做很多其他的好事) - 然后你可以選擇發送'stop'消息你開始DoWork()工作的時候了。

你使用ajax加載div的內容嗎? 如果是這樣,更好的方法如下:

var doWorkAjax=null;
function DoWork(){
    if (doWorkAjax) doWorkAjax.abort(); 
    doWorkAjax = $.ajax(url, data, function(result){
        ....
        doWorkAjax=null;
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM