/ / Testando se um evento aconteceu após um período de tempo em jQuery - javascript, jquery, xforms

Testando se um evento aconteceu após um período de tempo em jQuery - javascript, jquery, xforms

Eu estou escrevendo um script para um forms-faces xformsproduto que é desativado em um evento incorporado nas faces do formulário. O evento é chamado de "pronto para o xforms". Eu defini "startTime" como acontecendo assim que o documento estiver "pronto". O que eu quero que o script faça é avisar o usuário que está demorando muito para que o "pronto para o xforms" aconteça, digamos, se ele estiver 6 segundos desde "startTime" .Eu posso facilmente fazer coisas quando o "pronto para o xforms" "evento acontece usando o código abaixo:

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

no entanto, o aviso vai querer acontecer antes de "endTime" ser definido. Então eu acho que quero algo que funcione assim:

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

ou possivelmente de forma mais eficiente:

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

Alguém pode sugerir uma maneira de fazer isso?

Respostas:

1 para resposta № 1

Você pode fazer isso com setTimeout. (Exemplo completo abaixo.) Em jQuery "s ready manipulador, defina uma função para ser chamada em seis segundos via setTimeout, e no manipulador pronto do seu xforms, cancele isso via clearTimeout se ainda não aconteceu.

Editar Exemplo completo (em vez de meus trechos de código fragmentados anteriores), assume que tudo bem se o manipulador pronto do seu xforms estiver dentro sua jQuery ready manipulador:

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

(Você pode considerar fazer essas funções nomeadas em vez de anônimos, mas eu usei os anônimos acima para simplificar.