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>​

innerHTMLofqText更改为 undefined,而不是更改为,quotes[0]后跟quotes1. 现在我尝试通过alert()在 setInterval 函数中使用它来调试它,给我 for 循环的索引,两次都说“2”。那么,我将如何暂停 for 循环而不是 setInterval 创建新线程并增加索引?

4

4 回答 4

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 回答
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 回答
0

您可以通过使用可传递给函数的参数列表调用 setInterval 来强制将正确的变量传递给函数(在您的 jsfiddle 上测试)

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

setInterval 已经在创建一个循环,它的所有迭代将在每 n 毫秒后运行,在你的情况下是 2000。如果你在循环中调用 setInterval,那么它的内容将在每 n 毫秒运行一次。你只需要调用一次。请注意,Javascript 在浏览器中不是多线程的。

于 2012-08-29T16:04:01.427 回答