我正在为一个form-faces xforms产品编写一个脚本,该产品通过构建到表单面的事件进行键控。该事件被称为'xforms-ready'。我已经将'startTime'定义为'ready'中的文档。我希望脚本做的是警告用户在'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
有人可以建议这样做吗?
答案 0 :(得分:1)
您可以使用setTimeout
执行此操作。 (下面的完整示例。)在jQuery的ready
处理程序中,通过setTimeout
设置要在六秒内调用的函数,并在xforms ready处理程序中,如果它没有,则通过clearTimeout
取消该函数。发生了。
编辑完整的示例(而不是我早期的碎片代码片段),假设您的xforms就绪处理程序在 jQuery ready
处理程序中是可以的:< / p>
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;
}
}
);
});
(您可能会考虑使用这些命名函数而不是anonymous ones,但为了简单起见,我上面使用了匿名函数。)