2010-10-10 5 views
0

J'utilise du jQuery qui fonctionne bien dans tous les navigateurs sauf dans Internet Explorer 8 (et probablement pas dans les versions précédentes bien que je ne sois pas aussi inquiet à propos de ceux-ci.). J'utilise la fonction .each de jQuery pour faire une boucle sur tous les éléments d'un tableau JavaScript généré automatiquement sur ma page par le CMS assez rigide que j'utilise.Javascript dans Internet Explorer: Comment faire quelque chose après qu'une variable soit chargée/enregistrée

Par exemple, mon CMS écrit ce tableau d'objets d'image en javascript sur ma page:

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" 

Je suis alors en utilisant jQuery chaque fonction de boucle sur ce tableau et renvoie toutes les images dans une jolie petite liste non ordonnée .

Le problème est que lors de l'utilisation

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

travaille va bien dans FF/Safari/Chrome, etc., et effectivement en mesure de rendre ma liste non ordonnée à peu près immédiatement, Internet Explorer semble exécuter mon document.ready de jquery fonction avant d'enregistrer que le tableau 'paths' existe en JavaScript (même si ce jQuery est inclus après le code du tableau d'images). Je sais cela parce que je suis jeté une erreur «chemins est null/indéfini» dans IE.

Quand je l'ai changé de

$(document).ready(function() { 

à

$(window).load(function() { 

mon code a fonctionné comme il se doit dans IE car il exécute seulement mon jquery chaque «fonction après la page est chargée (qui ça craint parce que ça ralentit le temps de rendu et cause un 'décalage' dans ce que j'essaye de faire ... mais bon si ça marche). Cependant, il semble que l'IE tire toujours de ma fonction each tout en utilisant $ (window) .load avant d'enregistrer qu'un tableau nommé 'paths' existe si le site a été mis en cache.

Quelqu'un connaîtrait-il un moyen sûr de s'assurer que la variable de chemins est enregistrée par IE immédiatement afin que chaque fonction n'échoue pas?

+0

Quelle version d'IE? – jcolebrand

+0

IE8, je vais modifier la question pour mentionner que .. Merci! – flight643

+0

Juste curieux ... change les 'paths = [];' 'var paths = [];' change-t-il? –

Répondre

1

Toutes mes excuses pour lapalissade, mais sont les deux morceaux de code dans le même script/fichier? Vous dites qu'IE est en train d'obtenir la séquence erronée contrairement à d'autres navigateurs, donc je me demande si l'un ou les deux sont asynchrones.

Une autre chose évidente est que votre fonction vérifie que le tableau de chemins n'est pas nul, donc il ne lance pas d'erreur. Désolé, si ce commentaire vous avait jeté votre souris sur votre écran. Est-il possible d'obtenir la fonction qui génère le tableau paths pour appeler la fonction ou au moins pour définir un booléen, que votre fonction peut ensuite utiliser pour déterminer si elle a défini le tableau paths. Peut-être pourriez-vous définir la fonction ailleurs sur la page et demander à votre jquery de faire quelque chose comme ceci: document.ready (myfunction());

3

Il est

$(document).ready(..) 

pas

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

Hé, merde, je suis désolé.C'était juste une erreur de syntaxe dans ma question puisque je la tapais bêtement plutôt que de copier-coller le code que j'avais. J'ai mis à jour la question avec la syntaxe correcte ... Malheureusement, la question s'applique toujours:/Merci pour la réponse, je l'apprécie. – flight643

Questions connexes