我认为单击按钮后5s后会显示带有OK字符串的弹出窗口,但是单击按钮后会立即显示弹出窗口,为什么?
谢谢!
<html>
<head>
<title>Wake up call</title>
<script type="text/javascript">
function wakeUpCall() { // Function is defined here
setTimeout(aa("ok"), 5000);
}
function aa(bb) {
alert(bb);
}
</script>
</head>
<body bgcolor="lightblue">
<form>
<input type="button"
value="Wake me"
onclick="wakeUpCall()">
</form>
</body>
</html>
答案 0 :(得分:2)
function wakeUpCall() { // Function is defined here
setTimeout(function(){ alert("ok");}, 5000);
}
答案 1 :(得分:1)
如果你这样做会怎么样:
<html>
<head>
<title>Wake up call</title>
<script type="text/javascript">
function wakeUpCall() { // Function is defined here
setTimeout('aa("ok");', 5000);
}
function aa(bb) {
alert(bb);
}
</script>
</head>
<body bgcolor="lightblue">
<form>
<input type="button"
value="Wake me"
onclick="wakeUpCall()">
</form>
</body>
</html>
注意我引用了要在setTimeout函数中执行的语句。这些引言让你感到困惑,我认为这是一个很好的资源来看看:https://developer.mozilla.org/en-US/docs/DOM/window.setTimeout
另一种方法,我刚刚从上面的资源中学到,就像这样:
function wakeUpCall() { // Function is defined here
setTimeout(aa, 5000, "Your tekst here");
}
答案 2 :(得分:1)
<html>
<head>
<title>Wake up call</title>
<script type="text/javascript">
function wakeUpCall() { // Function is defined here
setTimeout(function(){aa("ok");}, 5000);
}
function aa(bb) {
alert(bb);
}
</script>
</head>
<body bgcolor="lightblue">
<form>
<input type="button"
value="Wake me"
onclick="wakeUpCall()">
</form>
</body>
</html>
答案 3 :(得分:1)
你试图以错误的方式去做。
您必须使用setTimeout
的回调:
setTimeout(function()
{
// actual code here
}, 5000);
迈克在他的回答中提供了 - 你可以使用可评估的字符串:
setTimeout('/* actual code here */', 5000);
但强烈建议不要使用他的另一个例子 - 将回调函数作为引用传递并调用回调参数。 但是,您必须记住,如果您使用回调参数,请参阅此section of MDN文章。所有浏览器都不支持回调参数。
就个人而言,我建议使用普通的旧回调,因为这就是使用setTimeout的方式。
仅供参考:
您的代码段不适合您的原因是:
setTimeout(aa('ok'), 5000);
// aa('ok') here is executed, and returns its value, so, in the end, you pass the returned value of aa inside the Timeout.
// and, nor alert alert, nor your function have a "return" statement, so they both will return always undefined.
// that translates to:
setTimeout(undefined, 5000); // and, that does nothing