在继续使用document.ready代码之前等待第一个事件完成

时间:2013-07-29 22:24:57

标签: javascript jquery events

我的问题很简单。

我有一些配置和加载需要在document.ready()调用之前完成。

// initialize ASAP so it loads super fast
soundManager.setup({
    url: 'swf/',
    onready: SMOnReadyHandler
});

这个onready事件处理程序可能需要很长时间才能完成。

在此之后,我想调用一个document.ready()事件监听器来加载我的页面的其余部分,如下所示:

$(document).ready(function() { 
    // code here might be dependent on the completion of 
    // soundManager.onready event handler 
});

如何$(document).ready处理程序完全完成后才能确保soundManager.onready出现?

提前多多感谢!

2 个答案:

答案 0 :(得分:3)

您可以使用deferred

var soundManagerDeferred = $.Deferred();

soundManager.setup({
    url: 'swf/',
    onready: SMOnReadyHandler
});

function SMOnReadyHandler() {
    soundManagerDeferred.resolve();
}

$(document).ready(function() {
    soundManagerDeferred.done(function() {
        //init
    });
});

答案 1 :(得分:0)

你不能,因为浏览器是谁确定DOM准备好的时候。我的建议是,只需删除你的document.ready处理程序,并将启动函数传递给声音管理器的onready。我的意思是,替换这个:

$(document).ready(function() { 
    // do init stuff 
});

有了这个:

function initStuff() {
    // do init stuff 
}
soundManager.setup({
    url: 'swf/',
    onready: initStuff
});

为了确保您没有引用任何不在DOM中的元素,请在</body>之前将代码添加到html的末尾。