【问题标题】:JavaScript setTimeout doesn't work [duplicate]JavaScript setTimeout 不起作用[重复]
【发布时间】:2012-11-06 22:13:14
【问题描述】:

我希望 JavaScript 函数在页面加载后 60 秒运行。 经过一番研究,我发现 setTimeout() 是解决方案。

这就是我所做的:

<body onLoad="setTimeout(postAction('news.reads', 'article'), 60000);">

不知何故,setTimeout 不起作用。页面加载后,无需等待 60 秒,因为 postAction() 立即运行。

为什么会这样?如何解决?那里有 setTimeout() 的替代品吗? 谢谢!

【问题讨论】:

  • 请提供一些代码示例...
  • 它可以是任何东西:您是否将postActionpostAction() 作为第一个参数传递给setTimout?第二个是错误。您是否将字符串作为第一个参数传递?不。 timeOut 以毫秒为单位,而不是秒:因此,60 秒写为 60000
  • 对不起,我之前发布了我的代码,但忘记将它标记为“代码”,所以它被删除了......现在我再次添加了代码示例。
  • 你不是在 60 秒后用你的 sn-p 调用函数,而是调用 函数的返回值postAction(argument, argument) 是一个函数调用,无论它返回什么,setTimeout 都会在 60 秒后尝试执行。很可能,这将是未定义的

标签: javascript jquery settimeout onload


【解决方案1】:

您需要将postAction 包装在一个函数中以延迟执行:

setTimeout(function() { postAction('news.reads', 'article'); }, 60000);

你实际上是立即执行postAction,你的代码相当于:

var result = postAction('news.reads', 'article');

setTimeout(result, 60000);

【讨论】:

  • 太棒了!为我工作,+1
  • 干净和恰当.. 谢谢:)
  • thanx 也为我工作 +1
【解决方案2】:

在JS中做你想做的事情的正确方法,即在页面加载后设置超时

(function(w)
{
    var load = function()
    {
         setTimeout(postAction,60000);
         if (w.removeEventListener)
         {//remove listeners, to avoid leak...
             return w.removeEventListener('load',load,false);
         }
         return w.attachEvent('onload',load);
    };
    if (w.addEventListener)
    {
        return w.addEventListener('load',load,false);
    }
    return w.attachEvent('onload',load);
}(this));

而不是window.onload = function(){setTimeout(postAction,60000);};,它也可以工作,但会导致 IE 反正这里的重点是setTimeout(postAction,60000);

更新
看到您正在使用的代码后,这是最简单的解决方法:

<body onLoad="setTimeout(function(){ return postAction('news.reads', 'article');}, 60000);">

【讨论】:

  • @IdoDoron:很高兴为您提供帮助,编码愉快
【解决方案3】:

你在使用setTimeout吗:

setTimeout(function(){alert("OK");}, 1000 * 60); // alert "OK" in 60s

【讨论】:

  • 我是:&lt;body onLoad="setTimeout(postAction('news.reads', 'article'), 60000);"&gt;
【解决方案4】:
<script>
        function doSomeJavascript() {
            // javascript code goes here
           alert('5 secs is up!');
        }
        // calls function doSomeJavascript() 5 secs after page load
        var interval = setInterval(doSomeJavascript, 5000);

        setTimeout(function() {
           window.clearInterval(interval);
        }, 5000);
</script>

【讨论】:

  • NOOOO setInterval 没有分配间隔 id...这是错误的!这会创建一个无限循环!继续@Martin,我敢你把这段代码粘贴到你的控制台中:)
  • 是的,但不要太远以防止这种情况发生。
  • 抱歉,这得到了 -1:第一个建议导致了无限循环,而您建议的解决方案是设置一个全局变量 - 只需使用 setTimeout,这就是它的用途
  • 好吧,我想我该睡觉了:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 2018-08-22
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多