2010-12-22 45 views
4

早上好,等待函数在再次启动前完成

我想每次用户按下按钮时调用相同的函数。这是目前发生的事情..

用户点击按钮 - >通话功能 - >函数需要1000毫秒+完成(由于与jQuery和AJAX调用动画)

我希望发生的是每次用户按下按钮,它将功能添加到队列中,等待先前的呼叫完成,然后开始。

这可能吗?

很抱歉,如果我的解释是有点混乱..

感谢马修

+1

你想排队的动画和ajax正确吗? – Cole 2010-12-22 22:39:26

回答

6

由于函数是可以存储属性的对象。每次调用它时(按钮按下),然后在函数执行结束时,您可以让函数为其自身增加一个“队列”属性,检查自身的队列属性是否大于0,如果是,则递减队列属性由一个和使用setTimeout再次自己调用。

+3

做到这一点的最好方法是使用setTimeout调用。另外,这是堆栈溢出的秘诀。 ;-) – draeton 2010-12-23 03:37:25

0

最近,我不得不这样做在我自己的应用程序。我给你的最好的建议是(假设你已经在JavaScript函数中有你的AJAX调用)将回调函数参数传递到你的JavaScript函数中。然后,在您的AJAX调用的success部分中,调用您的回调函数。

例子:

// In HTML <script> tags. 
$(document).ready(function() { 
    $("button#queue").click(function() { 
     GetMembers(GetGroups(), MemberCallback)); 
    }); 
}); 

function GetMembers(userId, callback) { 
    $.ajax({ 
     //Initialized AJAX properties 
     url: "/My/Project/Ajax/Page.extension", 
     data: "{ 'groupId':'" + groupId + "'}", 
     success: function (result) { 
      callback(result.d); 
     } 
    }); 
} 

function MemberCallback(members) { 
    // Do your thing here. 
} 
0

你可以添加一个回调函数来那个令动画,一旦动画完成,它被称为所以你可以做你想做的回调。

这里遵循从jQuery文档的例子:

$('#clickme').click(function() { 
    $('#book').animate({ 
    opacity: 0.25, 
    left: '+=50', 
    height: 'toggle' 
    }, 5000, function() { 
    // Put your code here, so it will be executed once the animation completes 
    }); 
}); 

P.S:晨?它几乎是午夜; D

+0

:D在这里也几乎是午夜。顺便说一句,我想他不知道(该动画完成时)是否再次按下按钮。 – 2010-12-22 22:52:08

0

您可以跟踪每次用户按下按钮时添加到队列中的全局队列/数组,然后您需要在函数中进行回调(例如在success回调中对于jQuery)来完成工作来检查队列并调用队列中的下一个函数。

+0

不需要全局命名空间污染:只需将属性添加到与其一起工作的对象即可。 – 2010-12-22 22:49:45

-1

当他们点击按钮时禁用按钮。当ajax例程完成时启用它。