2010-10-10 1 views
0

Я использую jQuery, который отлично работает во всех браузерах, кроме как в Internet Explorer 8 (и, вероятно, не в более ранних версиях, хотя я не так обеспокоен о них.). Я использую функцию .each jQuery, чтобы перебирать каждый элемент в массиве JavaScript, который автоматически создается на моей странице с помощью довольно негибкой CMS, которую я использую.Javascript в Internet Explorer: как сделать что-то после того, как переменная загружена/зарегистрирована

Например, мой CMS записывает этот массив объектов изображения в JavaScript на моей странице:

paths = []; 
paths[0] = new Image(); 
paths[0].src = "/path/to/image1" 
paths[1] = new Image(); 
paths[1].src = "/path/to/image2" 
paths[2] = new Image(); 
paths[2].src = "/path/to/image3" 
paths[3] = new Image(); 
paths[3].src = "/path/to/image4" 

Я тогда я использую JQuery каждой функции в цикле над этим массивом и возвращает все изображения в миленькой неупорядоченный список ,

Проблема заключается в том, что при использовании

$(document).ready(function() { ... }); 

работает отлично Jquery в в FF/Safari/Chrome и т.д., и фактически в состоянии немедленно оказать мой неупорядоченный список довольно много, Internet Explorer, кажется, запустить свой document.ready перед тем, как он зарегистрирует, что массив «путей» существует в JavaScript (хотя этот jQuery включен после кода для массива изображений). Я знаю это, потому что в IE я выбрал ошибку «paths is null/undefined».

Когда я изменил его от

$(document).ready(function() { 

в

$(window).load(function() { 

мой код работал, как это должно быть в IE, потому что он только выполняет свою JQuery «каждый» функцию после загрузки всей страницы (который отстой, потому что он замедляет время рендеринга и вызывает «отставание» в том, что я пытаюсь сделать ... но эй, если он работает). Однако при появлении этого IE иногда по-прежнему срабатывает моя каждая функция при использовании $ (window) .load, прежде чем он зарегистрирует, что массив с именем «пути» существует, если веб-сайт был кэширован.

Кто-нибудь знает верный способ оплаты, чтобы переменная path была зарегистрирована IE немедленно, поэтому каждая моя функция не сработает?

+0

Какая версия IE? – jcolebrand

+0

IE8, я отредактирую вопрос, чтобы упомянуть об этом .. Спасибо! – flight643

+0

Просто любопытно ... меняет 'paths = [];' на 'var paths = [];' делает разницу? –

ответ

1

Извиняюсь за констатирую очевидное, но есть два куска кода в одном файле сценария /? Вы говорите, что IE получает неправильную последовательность в отличие от других браузеров, поэтому мне интересно, является ли один или оба асинхронными.

Еще одна очевидная вещь заключается в том, чтобы ваша функция проверила, что массив путей не равен NULL, поэтому он не выдает ошибку. Извините, если бы этот комментарий заставил вас щелкнуть мышью на экране. Есть ли способ получить функцию, которая генерирует массив путей для вызова функции или, по крайней мере, установить логическое значение, которое ваша функция затем может использовать для определения того, получил ли он набор массивов путей.

Возможно, вы можете определить функцию в другом месте на странице и сделать свой jquery примерно таким: document.ready (myfunction());

3

Это

$(document).ready(..) 

не

$('document').ready(..) 
+0

Эй, дерьмо, извините.Это была просто синтаксическая ошибка в моем вопросе, так как я тупо набирал ее, а не копировал код, который у меня был. Я обновил вопрос с правильным синтаксисом ... К сожалению, проблема все еще применяется:/Спасибо за ответ, я ценю это. – flight643

Смежные вопросы