1

我认为单击按钮后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>
4

4 回答 4

2

您正试图以错误的方式进行操作。

您必须使用回调setTimeout

setTimeout(function()
{
    // actual code here
}, 5000);

迈克在他的回答中提供了 - 您可以使用可评估的字符串:

setTimeout('/* actual code here */', 5000);

但强烈建议不要这样做,请使用他的另一个示例 - 将回调函数作为引用传递并调用回调参数。但是,您必须记住,如果您使用回调参数,请参阅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
于 2012-11-21T07:31:09.770 回答
2
function wakeUpCall() { // Function is defined here
            setTimeout(function(){ alert("ok");}, 5000);
        }
于 2012-11-21T07:34:41.147 回答
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");
}
于 2012-11-21T07:18:38.643 回答
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>
于 2012-11-21T07:20:03.140 回答