setTimeout没有执行传递的函数

时间:2012-07-16 20:47:50

标签: javascript settimeout

我正在为测试人员使用一个简单的界面,我正在编写HTML页面。我需要做的是当用户按下按钮时打开一个特定的URL(URL在另一台服务器上触发Hudson / Jenkins作业)。以下是我用来完成此任务的代码:

function triggerJob() {
  var url = "...";
  var trigger = window.open(url);
  setTimeout(function() {trigger.close();}, 1000);
}

几点说明:

  • 我知道这是完成我想做的事情的一种坏方法。我已经使用jQuery实现了解决方案,并且由于某种原因,在以这种方式查询URL时,Hudson服务器上的作业不会被启动。奇怪的是,当我使用来自同一台机器的Ruby脚本查询它时,它的工作正常。
  • 我必须执行超时,因为如果我只是打开窗口然后立即关闭它,浏览器会按预期执行,但是Hudson服务器注册它并开始工作的速度太快了。
  • 我已尝试将除trigger.close();之外的其他语句放在匿名函数中,并且它们也未执行。毫无疑问,setTimeout没有执行它应该是的块。

感谢您提供给我的任何帮助。我已经玩弄了几个小时,无法弄清楚为什么我的代码没有正确执行超时。

1 个答案:

答案 0 :(得分:1)

在做其他事情的过程中弄清楚了这个问题,所以我想我会分享解决方案以防其他人遇到同样的问题。问题是我使用表单中提交按钮的onClick属性调用此函数。提交表单时,它会调用该函数,然后在函数执行后立即重新加载页面,这将取消triggerJob函数中设置的超时。如果要以这种方式使用setTimeout,则必须使用链接,单选按钮等。感谢所有试图帮助我的人。

德鲁