4

http://jsfiddle.net/xDWLQ/

JavaScript:

var quotes = new Array();
quotes[0] = "message 0";
quotes[1] = "message 1";

var qText = document.getElementById('qText');
for (i = 0; i < quotes.length; i++) {
    setInterval(function() { qText.innerHTML = quotes[i]; }, 2000);
}​

HTML:

<p class="qText" id="qText">Predefined text</p>​

innerHTMLに変更するのqTextではなく、未定義に変更しquotes[0]、その後に。を続けquotes1ます。ここで、setInterval関数内を使用してデバッグを試みalert()、forループのインデックスを取得しましたが、どちらも「2」と表示されていました。では、setIntervalが新しいスレッドを作成してインデックスをインクリメントする代わりに、forループを一時停止するにはどうすればよいでしょうか。

4

4 に答える 4

1

まったく異なるアプローチが必要になります。

var quotes = ["message 0", "message 1"];
var qText = document.getElementById('qText');
var i = 0;

var update = function() {
    qText.innerHTML = quotes[i++ % quotes.length];
};

update();
setInterval(update, 2000);
于 2012-08-29T15:46:00.010 に答える
1

これはループではなく、あなたが望むものだと思います。

var quotes = ["message 0", "message 1"];
var qText = document.getElementById('qText');
var i = 0;
var len = quotes.length;

setInterval(function() {
   qText.innerHTML = quotes[i++];
   if (i === len) i = 0; 
}, 2000);
于 2012-08-29T15:48:30.050 に答える
0

関数に渡すことができるパラメーターのリストを指定してsetIntervalを呼び出すことにより、関数に渡される正しい変数を強制できます(jsfiddleでテスト済み)。

setInterval(function(q) { qText.innerHTML = q; }, 2000, quotes[i]);
于 2012-08-29T15:51:16.917 に答える
0

setIntervalはすでにループを作成しており、そのすべての反復はnミリ秒ごとに実行されます(この場合は2000)。ループでsetIntervalを呼び出すと、そのコンテンツはnミリ秒ごとにi回実行されます。一度呼び出すだけです。Javascriptはブラウザでマルチスレッド化されていないことに注意してください。

于 2012-08-29T16:04:01.427 に答える