0

我正在为 form-faces xforms 产品编写一个脚本,该产品以表单面内置的事件为键。该事件称为“xforms-ready”。我已将“startTime”定义为文档“就绪”后立即发生。我希望脚本做的是警告用户在“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

任何人都可以建议这样做的方法吗?

4

1 回答 1

1

您可以使用setTimeout. (下面的完整示例。)在 jQuery 的ready处理程序中,设置要在六秒内调用的函数 via ,并在您的 xforms 就绪处理程序中,如果尚未发生setTimeout,请取消该 via 。clearTimeout

编辑完整示例(而不是我之前的零碎代码片段),假设您的 xforms 就绪处理程序位于您的 jQueryready处理程序中是可以的:

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;
          }
      }
    );
});

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

于 2010-06-01T09:02:09.343 回答