2010-12-22 42 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例程完成時啓用它。