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创建新线程并递增索引?
答案 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在浏览器中不是多线程的。