我有一个页面在页面加载时使用了大量的javascript计算。这可以将页面锁定几分钟,具体取决于执行的计算量。
我可以在页面加载时打开一个jquery模式框。计算功能然后触发,然后一旦完成,它们的模态框应该关闭。
框显示后几乎立即关闭的问题。我正在使用的代码在这里:
// In page startup functions
$(document).ready(function() {
// Initialise Modal
$('#dialog').jqm({ modal: true });
// Show Modal box
$('#dialog').jqmShow();
// Call all the startup functions and then hide the modal box
// once they have all completed.
StartUpCall((function() { $('#dialog').jqmHide(); })())
});
一旦所有的javascript完成,是否有jQuery触发的事件?那对我来说是一等奖。
编辑:我正在使用jqModal - http://dev.iceburg.net/jquery/jqModal/
答案 0 :(得分:1)
我会使用全局变量和回调函数。全局变量是计数器或字符串数组。在每次计算开始时,或者递增计数器或向数组添加唯一字符串,并在每次计算结束时递减计数器或删除唯一字符串并调用检查计数器== 0或array.length的函数== 0,此时你隐藏了对话框。
答案 1 :(得分:0)
我不确定我理解你的问题,标题也令人困惑。你确定计算同步运行吗?你在使用Ajax电话吗?如果是,则隐藏调用将在计算完成之前运行。
无论如何,jQuery支持自定义事件,您可以创建并以编程方式触发。例如,请查看此link。这对您的情况来说是一个优雅的解决方案。由于您还可以使用事件发送参数,因此您还可以轻松更新模态对话框的状态。
答案 2 :(得分:0)
弹出模式对话框后,使用setTimeout()调用处理器密集型代码。隐藏应该在该代码的末尾(处理器密集型代码,而不是调用代码)。您可以在setTimeout中使用0作为延迟。只有一个JavaScript线程正在运行(忽略WebWorkers。)
请注意,不同的浏览器对于脚本在发出“脚本无响应”警报之前运行多长时间有不同的容忍度。您可能必须将计算细分为由setTimeout启动的块。 IIRC,IE6(它的JS速度很慢,使问题复杂化)将很快超时。