我的问题很简单。
我有一些配置和加载需要在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
出现?
提前多多感谢!
答案 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的末尾。