我想延迟以下代码之间的执行:
答案 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);