【问题标题】:setTimeout not executing the passed functionsetTimeout 不执行传递的函数
【发布时间】:2012-07-16 20:47:50
【问题描述】:

我正在开发一个供测试人员使用的简单界面,我将其编写为 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 没有执行它应该执行的块。

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

【问题讨论】:

  • 它似乎对我有用,你测试的是什么浏览器?
  • 我使用的是 Chrome ......这不是重复的,因为我根本没有使用 jQuery,只是使用原生 JavaScript 函数。
  • 另外,triggerJob() 函数由按钮的 onClick 属性启动,如果这很重要的话。
  • 尝试使用window.setTimeout 以确保上下文正确。其他可能的原因是 setTimeout 方法已在您不知情的情况下被覆盖。

标签: javascript settimeout


【解决方案1】:

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

画了

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 2021-04-05
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多