我不能在函数中进行循环工作

时间:2014-06-20 14:40:07

标签: jquery

我正在尝试创建一个将文本放入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();
    };
})

4 个答案:

答案 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)。请注意,我将循环更改为110(包括),而不是09,以便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>