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

How to delay execution in between the following in my javascript

本文关键字:操作 之间 执行 延迟 我的 javascript      更新时间:2023-09-26

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

$("#myName").val("Tom");
///delay by 3s
$("#YourName").val("Jerry");
//delay by 3s
$("#hisName").val("Kids");
您可以使用

setTimeout

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

例如:

$("#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;
}

。是(几秒钟后):

答: 0深:1乙: 2C: 3

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

setTimeout返回一个句柄(这是一个非零数字),可用于在回调发生之前取消回调:

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

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

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

window.setTimeout('$("#YourName").val("Jerry")',3000);
你不能在不

锁定浏览器的情况下在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。它的基础知识是将函数引用或字符串(但是应避免)作为第一个参数传递,第二个参数指定代码应延迟多少毫秒。

如果延迟总是相同的(在你的例子中是 3s),你可以避免嵌套代码并使用 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);