我有一個文檔可能會讓用戶能夠多次運行相同的功能。有沒有辦法檢查功能是否正在運行,然後才能重新激活它?有沒有辦法檢查一個函數是否正在jQuery中運行?
回答
設置外部標誌。
var functionIsRunning = false;
function myFunction() {
if (!functionIsRunning) {
functionIsRunning = true;
//do stuff
functionIsRunning = false;
}
}
同樣的原理適用於jQuery函數。
這很容易。該功能未運行。
JavaScript是嚴格單線程的。如果瀏覽器正在響應任何用戶事件,則目前沒有功能正在運行。
,而這是真的,你可能只想排隊後的調用先前的代碼已經完成運行。 ESP。如果在第一種情況下使用定時器http://jsfiddle.net/gryzzly/ZGVan/,沒有預防動畫會堆積起來(我知道jQuery的助手「停止」函數,並且jQuery通常允許您與動畫進行交互,但它只是一個參與定時器的例子)。 – 2012-03-15 23:59:25
@gryzzly:這是完全不同的東西。如果您正在等待動畫結束,那麼您並未檢查函數是否正在運行,您正在等待定時器中運行的代碼達到特定狀態。 – Guffa 2012-03-16 00:26:14
如果有大量的實用工具的功能,您的呼叫很多來幫助你管理這個檢查無極
你可以設置一個標誌。像這樣:
(function() {
// your application within a closure to not pollute global scope
var handlerRunning = false;
// the function that will be called and shouldn't be running twice
var handler = function() {
if (handlerRunning) return;
handlerRunning = true;
// do stuff here
// when you're done, set handlerRunning to false
handlerRunning = false;
}
// assign your code to event handler for example
document.getElementById('awesome-button').addEventListener('click', handler, false);
}());
沒有關閉我的頭頂,但你可以使用一個變量來設置是否正在執行的函數。是這樣的:
function MyWrapper() {
this.running = false;
this.run = function() {
if (this.running==false) {
this.running = true;
// do something
this.running = false;
return true;
}
else {
return false;
}
};
}
如果單一延遲傳遞給
jQuery.when
,承諾對象(屬於遞延方法的子集)通過該方法返回。可以調用Promise對象的其他方法來附加回調,例如deferred.then
。當Deferred被解決或被拒絕時,通常由最初創建Deferred的代碼來調用適當的回調函數。例如,通過jQuery.ajax()
返回jqXHR對象是一種承諾,可以這樣使用:
$.when($.ajax("test.aspx")).then(function(data, textStatus, jqXHR) {
alert(jqXHR.status); // Alerts 200
});
逾期答覆,但我仍想在這裏註冊我的答案。 我遇到了一個類似的問題,其中我嵌入了setInterval
後臺服務器檢查功能。但是,在我的代碼中,還有很多可能性在其他條件下觸發相同的功能。所以,爲了確保我不記得它,我只是使用本地存儲來確保函數不會被一次又一次地調用。
此功能是在我的HTML文件,
function serverCheck(value){
localStorage.setItem("isFunctionRunning",1);
setInterval(checkServerStatus, value);
}
以下代碼段是我的另一個JS文件,
function xyz(){
//someCode
var checkFunction = localStorage.getItem("isFunctionRunning");
if(checkFunction != 1){
serverCheck(frequency);
}
}
- 1. 有沒有辦法檢查子進程是否仍在運行?
- 2. 有沒有辦法檢查Django管理命令是否正在運行?
- 3. 有沒有辦法檢查代碼是否在TransactionScope中執行?
- 4. 有沒有辦法來檢查一個JavaScript函數是否接受回調?
- 5. 有沒有辦法檢查下一個令牌是否結束?
- 6. 有沒有辦法檢查一個屬性是否超載?
- 7. 有沒有辦法檢查一個var是否使用setInterval()?
- 8. 有沒有辦法檢查我的腳本是否在phantomjs中運行?
- 9. 有沒有辦法檢查用戶是否使用JQuery登錄?
- 10. 有沒有辦法在jQuery中永久定義一個函數?
- 11. 有沒有辦法檢查ansicon.exe是否存在,而不使用CMake運行它?
- 12. 有沒有辦法檢查是否有其他程序全屏運行
- 13. 有沒有辦法檢查一個變量是否是整數? C++
- 14. 有沒有辦法檢查一個cookie在PHP中是否安全
- 15. 有沒有辦法檢查一個phpspec數組是否在多維數組中有一個鍵
- 16. 有沒有辦法檢查一個變量是否是JavaScript中的日期?
- 17. 運行FactoryGirl時有沒有辦法檢查DB數據?
- 18. 有沒有一種方法可以檢查一個函數在另一個函數中是否屬實?
- 19. 有沒有辦法檢查兩個DOM元素是否相等?
- 20. 有沒有辦法讓標籤在Python Tkinter中運行一個函數?
- 21. 有沒有辦法在ssh中運行本地bash函數
- 22. 有沒有辦法檢查兩個對象在Java中是否是別名?
- 23. 有沒有辦法檢查我的代理是否在線?
- 24. 有沒有辦法檢查文件是否在使用
- 25. 可可 - 有沒有辦法檢查NSURLConnection是否存在緩存?
- 26. 有沒有辦法來檢查一個元素是否有鼠標懸停?
- 27. 有沒有辦法檢測一個網站是否使用SPDY?
- 28. 有沒有什麼辦法來檢查VBScript函數是否被定義?
- 29. 有沒有什麼辦法來檢查一個twitter應用是否在後臺運行
- 30. 有沒有辦法檢查(文件)句柄是否有效?
-1這是行不通的。條件會使函數不能再次運行的唯一方法是,如果從函數內部調用它。只要該函數運行,其他代碼就不會在瀏覽器中運行。 – Guffa 2012-03-15 23:44:48
不正確。 AJAX功能可以並且與其他功能同時運行。 – pete 2012-03-15 23:58:47
這完全錯了。沒有與其他功能同時運行的特殊「AJAX」功能。 Javascript是單線程的;任何時候只有一個函數在運行。 – Guffa 2012-03-16 00:21:45