假設你在一個函數中有一個腳本,並且你將它連接到按鈕的onclick事件。JQuery - 當單擊一個按鈕時,如何告訴函數正在運行/忙碌以及如何告訴函數已完成?
我想知道你如何告訴一個功能正忙/正在運行,以及如何告訴它已完成/完成?
在JQuery中是否有一個標誌?
謝謝...
假設你在一個函數中有一個腳本,並且你將它連接到按鈕的onclick事件。JQuery - 當單擊一個按鈕時,如何告訴函數正在運行/忙碌以及如何告訴函數已完成?
我想知道你如何告訴一個功能正忙/正在運行,以及如何告訴它已完成/完成?
在JQuery中是否有一個標誌?
謝謝...
我喜歡@David Jashi和@rusln在我原來的問題下的後續評論。
不幸的是,他們沒有創建一個「答案」部分,所以我沒有辦法點擊他們(在評論中)的綠色複選標記,我只能回答我的問題,而不是在這裏關閉StackOverflow問題。 :-(
如果你在談論AJAX jQuery的功能,如$。員額,你有上成功的功能,您可以指定...
$('#loading').fadeIn(200);
$.post('link.php', $('#form').serialize(), function(data) {
// this will trigger when data is done retrieving
$('#newcontent').html(data);
$('#loading').fadeOut(200);
});
這裏沒有ajax ... – fletchsod
只需保持隨着功能的狀態變化:
var myFunctionRunning;
$('#myElem').click(function() {
myFunctionRunning = true;
// long running stuff goes here
myFunctionRunning = false;
});
如果要執行的功能,並檢查它是否正在運行,那麼你可以檢查與該元素相關的.data()存儲。
$(document).on("click.demo", "#btnRun", function (e) {
e.preventDefault();
var self = $(this),
status = self.data("_status");
if (status == "Running") return false;
// Define the status of execution
if(!status) self.data("_status", "Running");
// TODO: add your code here
// When finish, delete the flag
self.removeData("_status");
});
你也可以創建一個closure(見JavaScript: Closures)
考慮下面的例子:http://jsfiddle.net/qundC
// Creates a closure with status and the callback
var fnExecute = (function() {
var _running = false;
// Function returned by the closure
return function (e) {
e.preventDefault();
if(_running) {
$('#status').text("Running...");
return false;
}
_running = true;
$('#status').text("Starts...");
// TODO: add your code here
// Emulates an expensive processing
setTimeout(function() {
_running = false;
$('#status').text("Done!!");
}, 5000);
};
}());
// Assigns the function returned by the closure
$(document).on("click.demo", "#btnRun", fnExecute);
你可以使用某種類型的網站命名空間的變量,以保持對腳本 – sunpietro
使用回調的狀態。 –
[deferred](http://api.jquery.com/jQuery.Deferred/),[promises](http://api.jquery.com/promise/)允許您跟蹤函數的進度。這裏有一個深入的教程:[鏈接](http://msdn.microsoft.com/en-us/magazine/gg723713.aspx) – rusln