Проверка того, произошло ли событие после определенного периода времени в jQuery - PullRequest
0 голосов
/ 01 июня 2010

Я пишу скрипт для продукта xforms формы лица, который отключен от события, встроенного в грани формы. Событие называется «xforms-ready». Я определил «startTime» как происходящее, как только документ «готов». Сценарий должен предупредить пользователя о том, что до появления «xforms-ready» требуется слишком много времени, например, прошло 6 секунд с момента «startTime». Я легко могу сделать что-нибудь, когда событие '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 Ответ

1 голос
/ 01 июня 2010

Вы можете сделать это с помощью setTimeout. (Завершите пример ниже.) В обработчике ready jQuery установите функцию, которая будет вызываться через шесть секунд с помощью setTimeout, а в обработчике готовности xforms отмените это с помощью clearTimeout, если это еще не произошло.

Редактировать Полный пример (вместо моих предыдущих фрагментированных фрагментов кода) предполагает, что все в порядке, если ваш обработчик xforms ready в ваш 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;
          }
      }
    );
});

(Вы могли бы рассмотреть возможность сделать эти именованные функции вместо анонимными , но я использовал анонимные функции выше для простоты.)

...