在jQuery中测试一段时间后事件是否发生

时间:2010-06-01 08:53:14

标签: javascript jquery xforms

我正在为一个form-faces xforms产品编写一个脚本,该产品通过构建到表单面的事件进行键控。该事件被称为'xforms-ready'。我已经将'startTime'定义为'ready'中的文档。我希望脚本做的是警告用户在'xforms-ready'发生之前花了太长时间,比如说'startTime'已经过了6秒。当使用以下代码发生'xforms-ready'事件时,我可以轻松地做事:

new EventListener(document.documentElement,
  "xforms-ready",
  "default",
  function() {
    var endTime = (new Date()).getTime();
  }
);

然而,警告将在定义'endTime'之前发生。所以我想我想要一些像这样的东西:

If 6 seconds has passed since startTime and endTime is not yet defined do X

或可能更有效:

If 6 seconds has passed since startTime and 'xforms-ready' has not yet happened do X

有人可以建议这样做吗?

1 个答案:

答案 0 :(得分:1)

您可以使用setTimeout执行此操作。 (下面的完整示例。)在jQuery的ready处理程序中,通过setTimeout设置要在六秒内调用的函数,并在xforms ready处理程序中,如果它没有,则通过clearTimeout取消该函数。发生了。

编辑完整的示例(而不是我早期的碎片代码片段),假设您的xforms就绪处理程序 jQuery ready处理程序中是可以的:< / p>

jQuery.ready(function() {
    var xformsReadyTimer;

    xformsReadyTimer = setTimeout(function() {
        // Too long, show the warning
        xformsReadyTimer = undefined;
        alert("XForms is taking too long!");
    }, 6000);

    new EventListener(document.documentElement,
      "xforms-ready",
      "default",
      function() {
          if (xformsReadyTimer) {
              // Cancel the warning
              clearTimeout(xformsReadyTimer);
              xformsReadyTimer = undefined;
          }
      }
    );
});

(您可能会考虑使用这些命名函数而不是anonymous ones,但为了简单起见,我上面使用了匿名函数。)