2010-06-01 10 views
0

Je suis en train d'écrire un script pour un produit xforms en forme de face qui est masqué par un événement construit dans des faces de formulaire. L'événement s'appelle 'xforms-ready'. J'ai défini 'startTime' comme se produisant dès que le document est 'prêt'. Ce que je veux que le script fasse est d'avertir l'utilisateur que cela prend trop de temps avant que le 'xforms-ready' arrive, disons si cela fait 6 secondes depuis 'startTime'. Je peux facilement faire des choses quand se produit en utilisant le code ci-dessous l'événement « xforms-ready »:Test d'un événement survenu après une période de temps dans jQuery

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

cependant l'avertissement voudra se passer avant « endTime » est défini. Donc je suppose que je veux quelque chose qui fonctionne comme ceci:

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

ou peut-être plus efficace:

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

Quelqu'un peut-il suggérer une façon de le faire?

Répondre

1

Vous pouvez le faire avec setTimeout. (Complétez l'exemple ci-dessous.) Dans le gestionnaire ready de jQuery, définissez une fonction à appeler en 6 secondes via setTimeout, et dans votre gestionnaire xforms ready, annulez cela via clearTimeout si ce n'est déjà fait.

Modifier exemple complet (plutôt que mes extraits de code précédemment fragmentés), suppose qu'il est correct si votre XForms gestionnaire prêt est au sein votre gestionnaire 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; 
      } 
     } 
    ); 
}); 

(Vous pourriez envisager de faire ceux qui sont nommés fonctions plutôt que anonymous ones, mais j'ai utilisé des anonymes ci-dessus pour plus de simplicité.)

+0

Spot on, merci – chrism