Jquery Queue () Each () с задержкой () - PullRequest
3 голосов
/ 13 января 2011

У меня есть массив: результат [я].Я хотел бы просмотреть каждое поле в массиве и добавить его к элементу на моей странице.

$("tr:first").after(result[i]);

Но я бы хотел, чтобы это произошло с задержкой.

Я пытался понять, как работают очереди с каждым циклом и задержкой, но я просто не могу работатьэто из.Я могу получить задержку, но только до того, как они все добавятся.

Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 13 января 2011

Попробуйте queue:

$.each(result, function(idx, val) {
    $("tr:first").delay(1000).queue(function(next) {
        $(this).after(val);
        next();
    });
});

Просто чтобы завершить, это для jQuery 1.4. В более ранних версиях обратный вызов должен выглядеть так:

function() {
    // do whatever here
    $(this).dequeue();
}
2 голосов
/ 13 января 2011

Вот, сила рекурсии:

(function append(i) {
  if (i >= result.length) return;
  $('tr:first').after(result[i]);
  setTimeout(function(){append(i+1)},1000);
})(0);

Вы можете добавить дополнительный setTimeout в зависимости от того, нужен ли вам первый элемент сразу или после задержки.

1 голос
/ 13 января 2011

Другим способом, которым вы могли бы справиться с этим, является циклический перебор массива результатов и настройка набора вызовов функций setInterval или .delay () с задержками, которые зависят от индекса массива. Например:

for( var i = 0; i < result.length; i++ ){
  $('tr:first').delay(i*1000).after(result[i]);
}

Конечно, это не такое хорошее решение , как рекурсивное решение, предоставленное @Victor выше, но это другой подход, если вам не нравится рекурсия по любой причине.

1 голос
/ 13 января 2011
$(result).each(function(i) {
    $("tr:first").delay(1000).after(result[i]);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...