2012-05-10 28 views
2

我有一個jQuery對象數組。如果可見,我想與數組中的每個項目進行交互。我的流程如下:使用jQuery推遲對象與jQuery集合/數組串聯使用

  1. 創建一個數組,其元素都是jQuery對象。
  2. 對象可能會或可能不可見。
  3. 從數組中的第一個元素開始。
  4. 等待項目可見,時間是任意的。說3秒。如果變得可見,則轉到步驟5,否則從「播放」功能返回。 //更新
  5. 單擊該項目。
  6. 重複4-5,直到沒有更多項目要與之交互。

UPDATE(澄清的用例):
基本上我在做什麼是執行一系列的陣列上的串行操作。 A-B-C-D。但是,當A創建B的元素並且B已經被檢查過,如果它是可見的,則可能存在問題。它不會被點擊。

我一直在尋找jQuery的延期對象,但我在如何實現它的損失。這如何實現?是否有使用延遲對象的替代方法?

根據@ jmort的建議,我會附上我到目前爲止的內容。

var play = function() { 
    var dfds = []; 
    $(steps).each(function(i, v) { 
     dfds[i] = $.Deferred(); 
    }); 

    $.when.apply(null, dfds).then(function(){ 
     console.log('all done'); 
    }); 

}; 

假設步驟等於jQuery對象數組。

+1

也許包括到目前爲止還是你已經嘗試至少有一些你的代碼什麼的代碼示例與...合作。當你看到你的問題時,它給了每個人一些工作。 – jmort253

+0

@ jmort253:好的。我可以做到這一點。謝謝。 –

+1

沒有必要使用延遲,除非你想實現一些異步場景(「這裏是項目,這裏是當X發生時要做的事情;當X可能發生或甚至X可能是X時,我不知道該怎麼做「)。 – Jon

回答

2

它可以輕鬆完成:

var play = function() { 
    $(steps).filter(':visible').click(); 
}; 

更新:

var play = function() { 
    $(steps).each(function() { 
     $(this).filter(':visible').click(); 
    }); 
};​ 
+1

Bah,這是我的問題的完美答案。謝謝。但是,我忘記添加一個步驟,點擊時可能會創建dom元素的後續步驟。在這種情況下,這難道不會通過它犁過嗎?我會更新。 –

+1

@kennethkoontz。你是什​​麼意思_「將創建dom元素的後續步驟」_ – gdoron

+0

好,所以steps數組被創建,它可能會或可能不會包含可見元素。下面是一個場景,讓我們假設steps數組包括[A,B,C,D],其中A是可見的,B不是,C是,D是。此外,讓我們假設單擊A時B會變得可見。所以當數組被處理時,可能會點擊A並且下一個元素不會被點擊(你想要發生的)。希望這是有道理的。 –