jQueryを使用して、いくつかの要素にタイマーまたはインターバルループを設定し、数秒ごとにチェックしています。タイマーを設定して再起動する必要があるかどうかを確認したり、タイマーを設定して間隔を空けたり、停止する必要があるかどうかを確認したりしました。
単純化されていますが、これは基本的に私が必要とするものです:
var mytimers = new Array();
$('div.items').each(function() {
myID = $(this).attr('id');
mytimers[myID] = setInterval( function() { myFunction(myID) } , 3000)
});
function myFunction(param) {
alert(param);
if (something()) {
clearInterval(mytimers[param]);
}
}
クラス アイテムの ID は、id_1、id_2、id_3 です。しかし、id_3 を指定する 3 つのアラートを受け取るだけです。私のコードでは、「this」を渡そうとすることから始めましたが、問題を理解するために単純化を続けました。
変数を毎回新しいアドレスにコピーするにはどうすればよいですか? クロージャーを使用する必要があることはわかっています。何があっても他の変数を参照しているようです。
次のようなタイマーを使用してループに単純化してみました。
function tester(item) {
return function() {
alert(item);
};
}
for(x=1;x<=3;x++) {
setTimeout( '(function() { tester(x) })(x)' , 3000);
}
しかし、私は自分の問題を悪化させているだけだと思います。それは何もしていないようです.
以前の質問を検索しましたが、ほとんどは特定の問題を切り詰めるのではなく、大量の余分なコードで満たされ、他の方法で解決されています。この例を機能させることで、これがどのように機能するかを理解したいと思います。これを書いている間に、補助機能でタイマーをオフにできることがわかりました。
function tester(item)
alert(item);
function myTimer(item)
setInterval( function() { tester(item); }, 3000);
for(x=1;x<=3;x++)
myTimer(item);
それなしでどうやってこれを行うことができますか?何か良い方法はありますか?