2011-11-08 14 views
2

私は同じクラスを持つリスト項目のクリックイベントを、数秒ごとに1つずつシミュレートしようとしています。私はこれをさまざまな方法で試しました。 .eachとdelay()の組み合わせを使用すると、すべてのクリックが同時にトリガーされます。私は同様の問題を持つ人を発見し、答えは次の操作を実行することでした....eachを使用したTimed Jqueryイベント

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

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

これは私のすべての時間をjsのエラーを与え、配列を埋めるようには見えません...多分私が欠けていますあなたは再帰を持っていないので、明らかに何か...あなたのサンプルをクリックして

+0

「を.slide」 – GregM

答えて

0

jQuery.fn.delay()だけjQueryを使って作られたアニメーションのために働く再帰タイムアウトを使用しての.list-要素ごとに1秒のクリックを誘発するだろうか、コンテキストコードから完全である、遅延の方法はありませんまだjQueryコアを使用しています。しかし、plugins implementing setTimeout()などがjQueryに含まれていますが、元のsetTimeout()にはあまり機能が追加されていません。コードを固定するように

;)
jQuery.fn.get()実際HTMLDomElementを取得し、それが何の方法.click()を有していません。 (私はそれがあなたが得ているエラーだと思っています) 代わりにjQuery.fn.eq()を使用してください。すべてのインターバルクリアし、「クリック」している場合にも、それを複数回動作させるために、setTimeout()の代わりにsetInterval()を使用して:私たちは、あなたがクラスを持つ要素を持っているか、ここにあなたのhtmlを必要

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

私はこれを少し違ったやり方で試してみましたが、それを使うとタイムアウトを無視することに気付きました。 –

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); 
})()