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 № 1Você 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.