2013-02-08 55 views
2

所以,我想延遲這個JavaScript代碼。如何將.delay添加到.click on each迭代(jquery)

$(function(){ 
    $('.clickThis').each(function(){ 
     $(this).click(); 
    }); 
}); 

我想這

$(function(){ 
    $('.clickThis').each(function(){ 
     $(this).click().delay(5000); 
    }); 
}); 

上面的腳本不工作。

有沒有其他的選擇?

我試過谷歌它,但我仍然無法弄清楚,因爲我對JavaScript有一點了解。

+0

文檔是你的朋友。 '.delay()方法最適合延遲排隊的jQuery效果。因爲它是有限的 - 例如,它不提供取消延遲的方法.delay()不是JavaScript本地setTimeout函數的替代品,這對於某些用例可能更合適。 api.jquery.com/delay/ – mrtsherman 2013-02-08 14:47:09

回答

-1

我不知道,但我認爲setTimeout函數應該做的伎倆。 看到這裏https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout

+0

一般的答案只應該鏈接到第三方資源來支持答案。你不應該用它們作爲你的實際答案。我知道這很誘人,因爲在這個問題上得到答案的速度足夠快。 (PS我沒有downvote)。 – mrtsherman 2013-02-08 14:53:57

+0

我投了票。首先,因爲mrtsherman給出的原因。其次,因爲你發佈了一個鏈接而沒有真正知道它是否會有所幫助。答案應該是確定性的,而不是「猜測」。 – Alnitak 2013-02-08 14:57:15

+0

對不起,我認爲這個文檔是最好的解釋。下次我會花時間給出更好的答案。 – Mickael 2013-02-08 15:01:46

0

嘗試使用此:

$(function() { 
    var items=$('.clickThis'); 
    var length=items.length; 
    var i=0; 
    var clickInterval=setInterval(function(){ 
     items.eq(i).click(); 
     i++; 
     if(i==length) 
      clearInterval(clickInterval); 
    }, 5000); 
}); 
8

這將做到這一點:

$(function(){ 
    $('.clickThis').each(function(i, that){ 
     setTimeout(function(){ 
      $(that).click(); 
     }, 5000*i); 
    }); 
}); 
+0

@alnitak,謝謝。忘了定義變量.. – 2013-02-08 14:50:46

+0

,除了如果有多個.clickthis,第二個不會等待第一個被觸發開始等待5秒後才被觸發 – mikakun 2013-02-08 14:52:41

+0

@mikakun不需要等待 - 這個代碼將嘗試觸發每次點擊5秒,而不是從前一次點擊的「完成」開始5秒。你自己的代碼也是一樣的 – Alnitak 2013-02-08 14:54:20

-3

嘗試

$(function(){ 
    $('.clickThis').each(function(_,i){ 
     var me=$(this); 
     setTimeout(function(){me.click()},5000*i); 
    ); 
}); 
+0

這會一舉消除所有的點擊事件,而不是相隔5秒。 – Alnitak 2013-02-08 15:33:25

+0

他沒有提到他希望他們逐一開火。如果是這樣的話,他可以將循環索引乘以區間。 – deadlock 2013-02-08 15:37:42

+0

他確實在每次迭代中都說「,並且通過循環索引乘以當前最重要的答案(即使該答案實際上存在一個錯誤)。 – Alnitak 2013-02-08 15:40:45

0
var $clickthis=$(".clickthis"); 
var i= -1; 
var delayed = setInterval(function(){ 
if (++i < $clickthis.length) $clickthis.eq(i).trigger("click"); 
else clearInterval(delayed); 
}, 5000); 
+0

你呢,你的答案正在工作。 – user2054689 2013-02-08 15:43:29

3

這是一個使用遞歸循環的setTimeout版本。

$(function() { 
    var click = $('.clickThis').toArray(); 

    (function next() { 
     $(click.shift()).click(); // take (and click) the first entry 
     if (click.length) {   // and if there's more, do it again (later) 
      setTimeout(next, 5000); 
     } 
    })(); 
}); 

這種模式在setTimeout(..., 5000 * i)setInterval調用的優點是隻一個計時器事件在一次有史以來排隊。

一般來說,重複調用setTimeout幾個原因不是單一的通話更好地setInterval

  1. setInterval來電可以排隊即使瀏覽器是不活躍的,然後所有火多個事件儘可能快地在瀏覽器再次激活時。遞歸調用setTimeout可確保事件之間的最短時間間隔得到遵守。
  2. 隨着setInterval你要記住計時器手柄,因此您可以清除它
相關問題