0

フォーム フェースに組み込まれたイベントをオフにするフォーム フェース 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ハンドラーで、関数を 経由で 6 秒以内に呼び出されるように設定しsetTimeout、xforms の準備完了ハンドラーで、clearTimeoutまだ発生していない場合はそれをキャンセルします。

編集の完全な例 (以前の断片化されたコード スニペットではなく) では、xforms 対応ハンドラーがjQueryハンドラー内にある場合は問題ないと想定しています。ready

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 に答える