Мне нужно загрузить два apis. YouTube api, который вызывает onYouTubePlayerReady
, когда он загружен, и еще один api для SoundManager, который вызывает 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();
вещи в том, что если оператор будет работать только на второй раз эту функцию я называется.
Малый скрипку демо: http://jsfiddle.net/maniator/2X8rF/
Просто установите пару флагов:
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
установить логическое значение истинной тогда тест против тех а $(document).ready(function() { if (youTube === true && soundManager === true) { // Do stuff }});
Eсть вероятно, лучший способ с Defered's, но это просто и должно работать. Просто следите за тем, что загружено, а что нет.
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
При использовании JQuery, взгляните на отложенный:
http://www.erichynds.com/jquery/using-deferreds-in-jquery/
http://api.jquery.com/category/deferred-object/
Благодаря
Ответы только на ссылки не так полезны, пожалуйста, объясните, как отложенная помощь в этом случае. Ссылка прекрасна, но мне не нужно идти на другую страницу, чтобы узнать, что вы имеете в виду. Ссылка для дальнейшего объяснения прекрасна. –
Использование 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
- 1. Объединение несколько обработчиков событий в Javascript
- 2. Javascript несколько событий
- 3. Добавить несколько событий window.onload
- 4. Свяжите несколько событий в JavaScript
- 5. JavaScript: Когда JavaScript оценивает функцию, onload или когда функция вызывается?
- 6. Javascript Image OnLoad событие
- 7. Функция, когда несколько методов http завершены в Угловой завод
- 8. Сообщите, когда источник обновлен
- 9. Сообщите, когда репозиторий запущен
- 10. Несколько UpdatePanels и onload
- 11. Когда, собственно, происходит onLoad
- 12. ASP.Net OnLoad Остановка обработки событий
- 13. Сообщите, когда загружен многоугольник
- 14. Сообщите, когда выполняется CCAction
- 15. Сообщите, когда stringByEvaluatingJavaScriptFromString: завершил
- 16. Javascript - onload, onclick events
- 17. Javascript: несколько событий mouseout, вызванных
- 18. кнопка onload в javascript
- 19. Javascript обработчик событий несколько целей
- 20. Какие html-теги поддерживают атрибуты событий onload/onerror javascript?
- 21. Когда document.readystate == complete - это то же самое, когда onload срабатывает?
- 22. Javascript appendChild onload event
- 23. Javascript onload в HTML
- 24. Как известно FromEventPattern, когда события завершены?
- 25. Как определить, когда несколько SQL-запросов завершены с использованием PHP
- 26. Как сказать, когда несколько функций завершены с jQuery отложенным
- 27. Событие jquery запущено, когда все jquery.loads завершены?
- 28. Когда все мои функции завершены?
- 29. Javascript - несколько пользовательских прослушивателей событий
- 30. Сообщите, когда пользователь возвращается в историю браузера
Вы заново открыли [после] (https://github.com/Raynos/after.js) – Raynos
@Raynos ха-ха я даже не знаю, что Ает :-P – Neal
спасибо! работал как шарм :) – Alexis