11545 sujets

JavaScript, DOM et API Web HTML5

Bonsoir,

Je rencontre un problème lorsque j'ajoute des éléments dynamiquement à un noeud DOM avec appendChild , tout navigateur confondu :

J'ajoute les éléments au noeud (le noeud étant déjà bien chargé dans le DOM) en utilisant une boucle et appendChild et les éléments apparaissent sur la page que une fois que la boucle est terminée.

Si par contre je mets un alerte ("pouet pouet") après appendChild, alors je vois bien mes éléments qui s'affichent les uns après les autres.

A quoi ce phénomène est-il du et surtout comment puis-je le corriger ?

Merci de votre aide Smiley smile
Modifié par blueoliv (08 Dec 2006 - 10:36)
Bonjour,

Je ne comprends pas en quoi ça te pose problème. Est-ce que ta boucle prend dix secondes à s'exécuter ? Smiley eek

Les navigateurs doivent mettre en cache les changements dans le DOM et ne les rafraîchir qu'au bout d'un moment. Ca me parait très cohérent : si ce n'était pas le cas, l'exécution serait considérablement ralentie.
Cela me pose problème au niveau visuel. J'ai environ 100 éléments à afficher, et je souhaiterais que l'utilisateur voit ces éléments s'afficher au fur et à mesure pour des raisons d'élégance, qu'il n'ait pas à attendre que tout soit chargé simplement.

La boucle ne prend pas 10 secondes à s'exécuter, et j'ai essayé avec juste quelques éléments et c'est la même chose.

Mais ce que je ne comprends pas, c'est que le fait de mettre un alert change quelquechose ( ce qui est a priori complètement indépendant de la gestion du cache vis à vis des changements dans le DOM).

Le code est simple : (carres est un tableau d'objets créés à l'aide de document.CreateElement )

for ( var j=0; j<carres.length; j++ )
container.appendChild ( carres[j] );

Modifié par blueoliv (07 Dec 2006 - 10:46)
blueoliv a écrit :
Mais ce que je ne comprends pas, c'est que le fait de mettre un alert change quelquechose ( ce qui est a priori complètement indépendant de la gestion du cache vis à vis des changements dans le DOM).
Ah bon, et pourquoi ?

Il me semble assez logique que quand tu ouvres une fenêtre modale, qui bloque l'exécution du JavaScript (entre autres), le navigateur en profite pour rafraîchir l'affichage, surtout que l'on est dans ce cas bloqué dans l'attente d'une interaction avec l'utilisateur.

Pour ce qui est de ton problème, j'avoue que je ne sais pas s'il y a une solution. J'aurais tendance à dire que l'on n'a pas le contrôle sur ce genre de décisions, qui sont plus du ressort des développeurs des navigateurs. Smiley cligne

Si tu y tiens absolument, et que tu acceptes de faire du code un peu risqué, tu peux sans doute ajouter une partie de tes éléments, puis créer un timeOut pour ajouter le reste, ... avec le risque qu'il y ait des événements qui se déclenchent entre temps.
Merci pour ta réponse concernant l'alert, effectivement, c'est tout à fait logique Smiley smile

Je ne vais pas prendre de risques inutiles et je vais garder mon chargement d'éléments tel qu'il est.
Modifié par blueoliv (07 Dec 2006 - 13:15)
blueoliv a écrit :
Merci pour ta réponse concernant l'alert, effectivement, c'est tout à fait logique Smiley smile

Je ne vais pas prendre de risques inutiles et je vais garder mon chargement d'éléments tel qu'il est.
Oui, je pense aussi que c'est plus prudent. Smiley smile

Si ton sujet est résolu, peux-tu éditer ton premier message pour l'indiquer, comme expliqué dans les règles du forum ?