我如何让setInterval暂停它所在的for循环?

时间:2012-08-29 15:44:34

标签: javascript

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”。那么,我如何让for循环暂停而不是setInterval创建新线程并递增索引?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

答案 2 :(得分:0)

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

setInterval(function(q) { qText.innerHTML = q; }, 2000, quotes[i]);

答案 3 :(得分:0)

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