2015-03-19 2 views
0

Я хочу найти элементы с javascript с задержкой. На первом этапе я сделал это, и он работает.Функция javascript run с задержкой внутри итерации

function mytag() { 
    var elements = document.getElementsByTagName('div'); 

    for (var i=0, im=elements.length; im>i; i++) { 
    if (elements[i].className ==='hi'){ 

     alert('found'); 

    }} 
    } 

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

function mytag() { 
    var elements = document.getElementsByTagName('div'); 

    for (var i=0, im=elements.length; im>i; i++) { 
    (function(i){ 
     setTimeout(function(){ 
     if (elements[i].className ==='hi'){ 
      alert('found!'); 
     } 
     }, 3000 * i); 
    }(i)); 
    } 
} 

ответ

2

Вот пример того, как вы могли бы добавить asynchronousity в вашу функцию поиска:

function findElements() { 
    var elements = document.getElementsByTagName('div'); 
    var index = 0; 

    var findNext = function() { 
    var element = elements[index]; 
    index++; 

    if (element.className === 'hi'){ 
     // Item found 
     console.log('found:'+element); 
    } 

    if (index < elements.length) { 
     setTimeout(findNext, 100); 
    } 
    }; 

    findNext(); 
} 

findElements(); 

http://jsbin.com/zeseguribo/1/edit?html,js,console

1
function sleep(milliseconds) { 
    var start = new Date().getTime(); 
    while (1) { 
     if ((new Date().getTime() - start) > milliseconds) { 
      break; 
     } 
    } 
} // sleep end 

sleep(3000) затем вызвать в цикле.

Редактировать: Это блокирующий способ задержки. Для асинхронной, неблокирующей задержки вы можете использовать рекурсивную функцию.

+1

спать в JavaScript очень плохо - он вызывает пользовательский интерфейс для блокировки вверх. –

+0

Я думал, что ему может потребоваться блокировка задержки. – marcieng