JQuery - 当单击一个按钮时,如何告诉函数正在运行/忙碌以及如何告诉该函数已完成?

时间:2013-06-25 19:52:51

标签: jquery

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

我想知道你如何告诉某个功能正忙/正在运行以及如何告诉它已完成/完成?

JQuery中有标志吗?

...谢谢

4 个答案:

答案 0 :(得分:0)

如果您正在讨论AJAX jQuery函数,例如$ .post,那么您可以分配一个成功函数...

$('#loading').fadeIn(200);
$.post('link.php', $('#form').serialize(), function(data) {
    // this will trigger when data is done retrieving
    $('#newcontent').html(data);
    $('#loading').fadeOut(200);
});

答案 1 :(得分:0)

只需使用函数的状态保存变量:

var myFunctionRunning;

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

    // long running stuff goes here

    myFunctionRunning = false;
});

答案 2 :(得分:0)

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

不幸的是,他们并没有创造出一个"答案"部分,所以我无法点击它们上的绿色复选标记(在评论中),我只能回答我的问题而不是在这里关闭StackOverflow问题。 : - (

答案 3 :(得分: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");
});

您也可以创建 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);