2011-11-08 36 views
2

我想模擬一個點擊事件的列表項上的同一個類,每隔一段時間一次。我嘗試了很多不同的方式。使用.each和delay()的組合可以同時觸發所有的點擊。我發現有人有類似的問題,答案是做到以下幾點...定時jQuery事件使用。每個

  var elements = $(this).find('.slide'); 
      var index = 0; 

      setTimeout(function() { 
       $(elements).get(index).trigger("click"); 
       index++; 
      }, 3000); 

這給了我一個js錯誤每次和似乎不填充數組......也許我失去了明顯的東西...

感謝

+0

我們需要你的HTML在這裏,你有與類元素的.slide「 – GregM

回答

0

jQuery.fn.delay()僅適用於使用jQuery製作動畫觸發.LIST元素每隔1秒點擊,沒有拖延的辦法代碼仍然使用jQuery核心。然而,這裏有plugins implementing setTimeout()和類似jQuery,但它們不會在原始setTimeout()上添加太多功能。

至於固定您的代碼;)
jQuery.fn.get()得到實際HTMLDomElement,它有沒有方法.click()。 (我希望這是你得到的錯誤。) 改爲使用jQuery.fn.eq()。此外,使用setInterval()而不是setTimeout(),使其工作多次,然後當所有的「點擊」,清除間隔:

var interval = setInterval(function() { 
    elements.eq(index).trigger("click"); 
    index++; 
    if(index == elements.size()){ 
    clearTimeout(interval); 
    } 
}, 3000); 
+0

非常感謝! –

0

在你的樣品點擊應當trigerred只有一次,因爲你沒有遞歸。

嘗試以下操作:

$(this).find('.slide').each(function(index) { 
    $(this).delay(3000 * index).click(); 
}); 

您將在同一時間,但有不同的時期創建的所有超時。

+0

[.delay()](http://api.jquery.com/delay/)會延遲一個隊列,在這種情況下,看起來是空的fx隊列。它不會延遲功能鏈中的下一個操作。 – Esailija

+0

我試過這樣幾種不同的方式,發現使用.each時會忽略超時。 –

1

這裏是完全脫離的情況下代碼,我將如何使用遞歸超時

(function(){ 
var listElements = jQuery(".list-elements"), i = 0; 

    function triggerClick(){ 

     if(listElements[i]) { 
     listElements.eq(i++).trigger("click"); 
     window.setTimeout(triggerClick, 1000); 
     } 

    } 
window.setTimeout(triggerClick, 1000); 
})()