使用jQuery延迟对象以串行方式使用jQuery集合/数组

时间:2012-05-10 07:28:21

标签: javascript jquery jquery-deferred

我有一个jQuery对象数组。如果它们可见,我想与数组中的每个项目进行交互。我的流程是这样的:

  1. 创建一个数组,其元素都是jQuery对象。
  2. 可能会显示或不显示这些对象。
  3. 从数组中的第一个元素开始。
  4. 等待项目可见,时间是任意的。说3秒。如果可见,请转到步骤5,否则从“播放”功能返回。 //更新了
  5. 点击该项目。
  6. 重复4-5,直到没有其他项目可以与之互动为止。
  7. 更新(用例说明):
    基本上我正在做的是对阵列执行一系列串行操作。 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 个答案:

答案 0 :(得分:2)

可以轻松完成:

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

<强>更新

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