3

假设您在函数中有一个脚本,并将其连接到按钮 onclick 事件。

我想知道你如何判断一个函数是否繁忙/正在运行以及如何判断它是否已完成/完成?

JQuery中有一个标志吗?

谢谢...

4

4 回答 4

0

如果你在谈论 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);
});
于 2013-06-25T19:56:37.780 回答
0

只需保留一个带有函数状态的变量:

var myFunctionRunning;

$('#myElem').click(function () {
    myFunctionRunning = true;

    // long running stuff goes here

    myFunctionRunning = false;
});
于 2013-06-25T19:58:23.383 回答
0

如果您想执行一个函数并检查它是否正在运行,那么您可以检查与该元素关联 的.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);
于 2013-06-25T21:50:58.047 回答
0

我喜欢@David Jashi 和@rusln 在我最初的问题下的后续评论。

不幸的是,他们没有创建“答案”部分,所以我无法点击他们(在评论中)的绿色复选标记,我只能回答我的问题,而不是在此处关闭 StackOverflow 问题。:-(

于 2013-06-25T21:36:19.910 回答