假设您在函数中有一个脚本,并将其连接到按钮 onclick 事件。
我想知道你如何判断一个函数是否繁忙/正在运行以及如何判断它是否已完成/完成?
JQuery中有一个标志吗?
谢谢...
假设您在函数中有一个脚本,并将其连接到按钮 onclick 事件。
我想知道你如何判断一个函数是否繁忙/正在运行以及如何判断它是否已完成/完成?
JQuery中有一个标志吗?
谢谢...
如果你在谈论 AJAX jQuery 函数,例如 $.post,你有一个 on-success 函数,你可以分配......
$('#loading').fadeIn(200);
$.post('link.php', $('#form').serialize(), function(data) {
// this will trigger when data is done retrieving
$('#newcontent').html(data);
$('#loading').fadeOut(200);
});
只需保留一个带有函数状态的变量:
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");
});
您也可以创建一个闭包(请参阅JavaScript:闭包)
考虑以下示例:http: //jsfiddle.net/qudC
// 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);
我喜欢@David Jashi 和@rusln 在我最初的问题下的后续评论。
不幸的是,他们没有创建“答案”部分,所以我无法点击他们(在评论中)的绿色复选标记,我只能回答我的问题,而不是在此处关闭 StackOverflow 问题。:-(