我正在尝试创建一个将文本放入abc div
并使用for循环的函数,我希望在该div中显示10个随机文本。我不能让我的函数在for循环中工作,它可以工作一次然后停止。我怎样才能做到更多?
function myFunction() {
setTimeout(function () {
var rand = Math.floor((Math.random() * 100) + 1);
$("#abc").text(rand);
}, 1000);
}
$('#start').click(function () {
for (var i = 0; i < 10; i++) {
myFunction();
};
})
答案 0 :(得分:1)
这样的事情? - http://jsfiddle.net/PQmj2/
您需要做的是在每次setTimeout调用之间添加延迟。
function myFunction(i) {
setTimeout(function () {
var rand = Math.floor((Math.random() * 100) + 1);
$("#abc").text(rand);
}, 1000 * i);
}
$('#start').click(function () {
for (var i = 0; i < 10; i++) {
myFunction(i);
};
})
我在这里做的是将i
的值传递给myFunction
。这样,每次通话之间会有1秒的延迟,即1000 * 1
= 1秒,1000 * 2
= 2秒,1000 * 3
= 3秒,依此类推。
答案 1 :(得分:1)
你的循环计划对myFunction
的10次调用,所有这些调用将在一秒钟之后一个接一个地发生。如果你想安排10个电话在10秒的时间内每秒运行一次(比方说),你必须为第二个,第三个,第四个等使用不同的间隔。
function myFunction(count) {
setTimeout(function () {
var rand = Math.floor((Math.random() * 100) + 1);
$("#abc").text(rand);
}, 1000 * count);
}
$('#start').click(function () {
for (var i = 1; i <= 10; i++) {
myFunction(i);
};
})
我将i
传递给myFunction
(作为count
)。请注意,我将循环更改为1
到10
(包括),而不是0
到9
,以便count * 1000
中的myFunction
第一次循环迭代是1000
(因为你似乎希望第一次循环发生在一秒之后,而不是立即发生)。
答案 2 :(得分:0)
问题不在于你的setTimeout无法正常工作,而是它同时设置了10个1秒的超时,所以它们都在同一时间点火1秒后来。你想要做的是根据你的循环索引错开你的超时:
function myFunction() {
var rand = Math.floor((Math.random() * 100) + 1);
$("#abc").text(rand);
}
$('#start').click(function () {
for (var i = 0; i < 10; i++) {
setTimeout(myFunction, i * 1000);
};
})
答案 3 :(得分:-1)
setTimeout
正在调用延迟的内容。如果您希望重复使用setInterval
,请使用。{/ p>