为什么这个setTimeout不起作用

时间:2011-02-25 10:42:02

标签: javascript

我刚刚进入Java。我正在编写一个简单的脚本来打开一个窗口,然后在短暂的延迟后关闭它。我已经尝试了以下各种内涵,但无济于事。该函数有效(因为它打开,然后关闭窗口),但延迟不会发生。

function manualWindow(){
testWindow = window.open("popup.php","interaction","resizable=0,width=800,height=600,status=0");
setTimeout(testWindow.close(),5000);
}

谢谢

4 个答案:

答案 0 :(得分:19)

你想:

setTimeout(function() { testWindow.close(); },5000);

当前代码在命中后立即执行该函数,然后在延迟后尝试运行它的返回值。通过将其包裹在功能中,它将在5秒后正确运行。

示例:

<html>
<head></head>
<body>
<script type="text/javascript">
    function manualWindow(){
       testWindow = window.open("http://www.google.co.uk","interaction","resizable=0,width=800,height=600,status=0");
       setTimeout(function() { testWindow.close() },5000);
    }

    manualWindow();
</script>
</body>
</html>

答案 1 :(得分:0)

您没有正确使用setTimeout。试试这个:

function manualWindow(){
   testWindow = window.open("popup.php","interaction","resizable=0,width=800,height=600,status=0");
   setTimeout(function() { testWindow.close(); },5000);
}

答案 2 :(得分:0)

首先,您要在匿名函数中定义代码。这个结构:

(function() {
  ...
)();

做两件事。它定义了一个匿名函数并调用它。这样做的范围很广,但我不确定这是你真正想要的。

您将代码块传递给setTimeout()。问题是update()在执行时不在范围内。但是,如果你传入一个函数指针,那么它可以工作:

(function() {
  $(document).ready(function() {
    update();
  });
});

因为函数指针更新在该块的范围内。

但就像我说的那样,不需要匿名函数,所以你可以像这样重写它:

答案 3 :(得分:-2)

我认为你的代码缺少第一个参数testWindow.close()中的qutoes。这可以通过以下方式纠正:

function manualWindow() {
    testWindow = window.open("http://www.google.com", "interaction", "resizable=0,width=800,height=600,status=0");
    setTimeout('testWindow.close()',5000);
}

manualWindow();

我发现此链接可能对您有所帮助https://developer.mozilla.org/en/DOM/window.setTimeout