JQuery пауза в цикле массива, пока предыдущий элемент не будет готов

0

Привет, новый для 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]);
        }
    });
});
  • 0
    Вы не можете контролировать, когда загружается iFrame. Это невозможно.
  • 0
    Замените этот блок кода $(this).ready() { $(this).attr('src', url[index]); } с $(this).ready(function(){ $(this).attr('src', url[index]); }); увеличивать index в каждом цикле
Теги:

3 ответа

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

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);
    });
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 ); 
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню