我必须加载两个apis。 YouTube API在加载时调用onYouTubePlayerReady
,另一个用于SoundManager的API,加载时调用soundManager.onready(...)
。我在这些ready
函数的每一个中都做了很多工作来准备网站。但是,我也需要知道两者何时完成,因此我可以进行更多的初始化,这需要两者都完全加载。任何想法如何在调用这两个ready
函数时调用该函数?在javascript中完成多个onLoad事件时请告知
回答
对它们都使用回调。
var callback = (function(){
var count = 0;
return function(){
count++;
if(count === 2){
//both ran and do something
}
}
})();
然后在这两个onloads结束只是做:
callback();
中的事情,如果语句只会在第二次运行此函数I S调用。
只需设置几个标志:
var aDone = false;
var bDone = false;
function whenADone(){
// do your other stuff
aDone = true;
if(bDone) whenBothDone();
}
function whenBDone(){
// do your other stuff
bDone = true;
if(aDone) whenBothDone();
}
你可以让您的两个readys
设置一个布尔值true,那么对那些测试$(document).ready(function() { if (youTube === true && soundManager === true) { // Do stuff }});
有可能是Defered的更好的方式,但这很简单,应该工作。只要跟踪什么是加载的,什么不是。
var status = {
youtube: false,
sound: false
};
var loaded = function() {
if (!status.youtube) return;
if (!status.sound) return;
// load stuff!
};
var onYoutubePlayerReady = function() {
status.youtube = true;
loaded();
};
soundManager.onready = function() {
status.sound = true;
loaded();
}
这也会工作。感谢你的回答。 – Alexis 2011-12-20 19:45:05
如果使用jQuery,来看看延期:
http://www.erichynds.com/jquery/using-deferreds-in-jquery/
http://api.jquery.com/category/deferred-object/
感谢
只有链接的答案没有那么有用,请解释延迟在这种情况下是如何有用的。一个链接很好,但我不应该去一个不同的页面,以了解你的意思。链接进一步的解释是好的。 – 2011-12-20 18:40:54
使用jQuery deferred,你可以建立承诺为每个准备功能,并结合他们用jQuery.when触发最后的行动。例如
function promiseYoutube() {
var dfd = $.Deferred();
window.onYoutubePlayerReady = function() {
console.log("Youtube");
dfd.resolve();
};
return dfd.promise();
}
function promiseSoundManager() {
var dfd = $.Deferred();
window.soundManager.onready = function() {
console.log("SoundManager");
dfd.resolve();
};
return dfd.promise();
}
$.when(promiseYoutube(), promiseSoundManager()).then(function(){
console.log('Youtube+SoundManager');
});
并有小提琴模拟这些回调http://jsfiddle.net/nikoshr/hCznB/
很酷。谢谢你的伟大答案。它可以工作,但对于这个问题稍微复杂一些。但下次我肯定会记住这一点。谢谢。 – Alexis 2011-12-20 19:47:27
- 1. 如何等待onload事件在JavaScript中完成其工作?
- 2. Soundpool onload完成通知
- 3. Javascript appendChild onload事件
- 4. Javascript - onload,onclick事件
- 5. JavaScript的 - 在onload事件
- 6. Telerik:ajax请求完成事件
- 7. WP7 HttpWebRequest如何知道多个请求何时完成?
- 8. 当多个AsyncHttpClient请求完成时收到通知
- 9. 在Onload事件中使用Javascript操作
- 10. JavaScript等待事件完成
- 11. XMLHttpRequest onload在完成时破坏响应?
- 12. JavaScript捕获onload&onunload事件
- 13. JavaScript图片OnLoad事件
- 14. 的Javascript IMG onload事件
- 15. Javascript - 取消onload事件
- 16. 在onload事件
- 17. onLoad事件在图像加载完成之前触发
- 18. 将HTML <body> onLoad事件覆盖JavaScript窗口onload事件?
- 19. navigateToURL在flex中完成时的事件
- 20. 当任何Ajax请求完成时触发一个事件
- 21. Javascript:从多个函数onload事件收集信息,直到网页完成加载
- 22. css完成时的事件
- 23. FragmentTransaction完成时的事件
- 24. 在一个循环中的javascript onload事件
- 25. 当文本框自动完成时触发一个javascript事件?
- 26. 如何链接两个文件都有onload事件的多个javascript文件?
- 27. 如何在jQuery UI自动完成中组合多个事件?
- 28. JavaScript的冲突全身多处的onload事件,必须先在
- 29. 在请求时完成一个AsyncTask
- 30. 事件完成
您重塑[后](https://github.com/Raynos/after.js) – Raynos 2011-12-20 18:45:05
@Raynos哈哈我甚至不知道这生根粉:-P – Neal 2011-12-20 18:45:28
谢谢!工作就像一个魅力:) – Alexis 2011-12-20 19:42:24