0

それぞれに機能が割り当てられた一連のボタンをループする小さなスクリプトを作成しました。スクリプトは以下のとおりです。

$('#play').bind('click', function() {
    setTimeout( function(){ $('#b12').click(); }, 0 );
    setTimeout( function(){ $('#b13').click(); }, 2500 );
    setTimeout( function(){ $('#b14').click(); }, 5000 );
});

これで問題なく動作しますが、各関数を「setTimeout」で呼び出すよりももう少し自動化しようとしています。私は以下のコードを持っていますが、何か間違っていると思います:

$('#play').click(function(){ 
    $('.buttons').each(function(){
        var time = 0;
        setTimeout( function(){ $(this).click(); }, time );
        time+= 2500;
    });
});

問題の HTML は次のとおりです。

<button id="b12" class="buttons" onclick="oct12()">12th</button>
<button id="b13" class="buttons" onclick="oct13()">13th</button>
<button id="b14" class="buttons" onclick="oct14()">14th</button>

<button id="play">play</button>
4

3 に答える 3

2

これには .each のインデックスを使用できます。独自のコードでは、繰り返しごとに時間をリセットします

   $('#play').click(function(){
       $('.buttons').each(function(i){
        setTimeout( function(){ $(this).click(); }, i * 2500);                
       });

  });

デモ

于 2012-10-22T10:28:57.920 に答える
1

time次のコードのように、.each()の外に変数を配置します。

$('#play').click(function(){ 
    var time = 0;
    $('.buttons').each(
        setTimeout( function(){ $(this).click(); }, time );
        time+= 2500;
    });
});
于 2012-10-22T10:22:23.490 に答える
0

プラグイン jquery-timingのようなものを使用できます。これにより、タイミングの問題が非常に簡単になります。

$('#play').bind('click').$('#b12,#b13,#b14').each($).click().wait(2500);

それでおしまい。

この例では、プラグインのインライン バージョンの bind()順次ループされたバージョンの each()、遅延メソッドのwait(timeout)を使用しています。

PS: .bind('click') の代わりに .on('click') と書くのが好きです。

于 2012-10-22T11:49:52.740 に答える