jQuery在数组循环中暂停,直到上一个项目准备就绪

时间:2014-01-23 11:51:05

标签: jquery

嘿,我是jQuery的新手,我希望我的头衔有道理:P。我需要在这个循环中暂停,直到数组中的前一个iframe准备就绪,然后才能获得src。这是我的一些代码,我认为它相当接近,但我错过了一些东西。

enter code here

var url = [
    "http://www.stuff.co.nz/" ,
    "http://www.metservice.com/marine-surf/tides/nelson"
];

$(function()
{
    $("iframe").each(function(index)
    {
        if (index == 0)
        {
            $(this).attr('src', url[index]);
        }
        $(this).ready()
        {
            $(this).attr('src', url[index]);
        }
    });
});

3 个答案:

答案 0 :(得分:0)

你必须等待iFrame的加载事件,然后触发下一次迭代,这是你在每个()循环中不能轻易做的事情,所以使用循环函数似乎更好

var url = [
    "http://www.stuff.co.nz/",
    "http://www.metservice.com/marine-surf/tides/nelson"
];

$(function () {
    var iframes = $("iframe"),
        i = 0,
        l = iframes.length;

    (function fn(elem) {
        elem.load(function() {
            if (i<l) {
                fn( iframes.eq( elem.index(iframes) + 1 ) );
            }
        }).prop('src', url[i++]);
    })(iframes.first());
});

FIDDLE

答案 1 :(得分:0)

试试这段代码..

$(function() {
   var totalFrames = $("iframe").length;

   function setURL ( index ) {
      $("iframe:eq("+index+")").attr('src', url[index]);
      $("iframe:eq("+index+")").load(function () {
         alert('iframe loaded');
         if ( index < totalFrames ) {
            setURL( index );
         } 
      });

   }
   setURL ( 0 ); 
});

答案 2 :(得分:0)

试试这个:

    function loadFrames(index)
    {
         if(index>=$("iframe").length)
            return;
         $("iframe").eq(index).attr('src', url[index]);
         $("iframe").eq(index).load(){
           loadFrames(index++);
         }

    }
    $(function(){
      loadFrames(0);
    });