如何在我的javascript中延迟执行以下操作

时间:2011-05-13 10:41:22

标签: javascript jquery

我想延迟以下代码之间的执行:

4 个答案:

答案 0 :(得分:65)

您可以使用setTimeout

setTimeout(function() {
    // Your code here
}, delayInMilliseconds);

E.g:

$("#myName").val("Tom");

/// wait 3 seconds
setTimeout(function() {
    $("#YourName").val("Jerry");

    /// wait 3 seconds
    setTimeout(function() {
        $("#hisName").val("Kids");
    }, 3000);
}, 3000);

setTimeout计划在间隔后运行(一次)的函数。调用它的代码会继续,并且在将来的某个时间点(在您指定的大致时间之后,尽管不精确),该函数将由浏览器调用。

假设你有一个名为output的函数,它将文本附加到页面上。输出结果如下:

foo();
function foo() {
    var counter = 0;

    output("A: " + counter);
    ++counter;
    setTimeout(function() {
        output("B: " + counter);
        ++counter;
        setTimeout(function() {
            output("C: " + counter);
            ++counter;
        }, 1000);
    }, 1000);
    output("D: " + counter);
    ++counter;
}

...(几秒钟后):

A: 0
D: 1
B: 2
C: 3

注意第二行。 foo代码的其余部分在任一计划函数之前运行,因此我们在D行之前看到B行。

setTimeout返回一个句柄(非零数字),你可以用它来取消回调:

var handle = setTimeout(myFunction, 5000);
// Do this before it runs, and it'll never run
clearTimeout(handle);

还有相关的setInterval / clearInterval执行相同的操作,但会在您指定的时间间隔内重复执行(直到您停止它为止)。

答案 1 :(得分:4)

您可以使用setTimeout函数。我认为语法是

window.setTimeout('$("#YourName").val("Jerry")',3000);

答案 2 :(得分:2)

如果不锁定浏览器,您无法“延迟”JavaScript;即用户不能移动鼠标或点击任何东西(不需要3秒钟!)。

相反,你应该考虑设置一个超时,它将在未来的某个时间执行指定的代码......

$("#myName").val("Tom");
setTimeout(function () {
    $("#YourName").val("Jerry");

    setTimeout(function () {
        $("#hisName").val("Kids");
    }, 3000);
}, 3000);

您可以在此处查看setTimeout的文档:https://developer.mozilla.org/en/window.setTimeout。它的基础是你传递函数引用或字符串(但应该避免),作为第一个参数,第二个参数指定代码应该延迟多少毫秒。

答案 3 :(得分:2)

如果延迟始终相同(示例中为3秒),则可以避免使用嵌套代码并使用setInterval代替setTimeout

var i
  , ids = ["myName", "YourName", "hisName"]
  , names = ["Tom", "Jerry", "Kids"];

i = setInterval(function () {
    if (ids.length > 0) {
        $("#" + ids.shift()).val(names.shift());
    } else {
        clearInterval(i);
    }
}, 3000);