Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Создать задержку при выполнении функции (https://javascript.ru/forum/jquery/49285-sozdat-zaderzhku-pri-vypolnenii-funkcii.html)

Lernos 05.08.2014 22:43

Создать задержку при выполнении функции
 
Для автоматизации действий на нужном мне сайте получил от товарища скрипт:
$('a:contains("xxxxx")').siblings('.xxxxx').each(function() {
  *функция*
}) ;


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

tsigel 06.08.2014 11:03

$('a:contains("xxxxx")').siblings('.xxxxx').each(function(index) {
  setTimeout(*функция*, (index * 100) || 10);
}) ;


где index - номер элемента набора.

Вообще, как правило, если вы используете setTimeout - значит что-то пошло не так (если вы конечно не делаете анимации)

Viral 06.08.2014 17:46

Может, лучше посчитать элементы и setInterval,ом потом перебрать?
Как-то так, например
var a = $.makeArray($('a:contains("xxxxx")').siblings('.xxxxx')),
        l = a.length,
        i = 0,
        c;
c = setInterval(function(){
    if (i <= l){
        $(a[i]).(/*всякие действия*/);
    }else{
        clearInterval(c);
    }
    i++;
},1500);

tsigel 06.08.2014 17:50

Viral,
Интервалом вообще лучше не пользоваться, лучше запускать таймаут после каждой итерации.
http://learn.javascript.ru/settimeout-setinterval

Ленча 08.08.2014 17:43

delete


Часовой пояс GMT +3, время: 00:04.