Bonsoir
Encore un topic/truc pour débutant(e) :
Context : Soit un paragraphe, que nous appelerons messageArea, dans un document HTML, pour lequel le contenu texte est déterminé à l'execution, et fixé par une procedure JavaScript.
Ce qui viens d'abord à l'esprit est
pour l'HTML, puis
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <p id="messageArea"></p>
pour le code JavaScript.
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 text = xxxx; // compute anything you want here messageArea = document.getElementById('messageArea'); messageArea.firstChild.nodeValue = text; // <- Erreur d'execution
Ca a l'air beau, mais ça ne marche pas
Zut, pourquoi ?
Raison : Dans le code HTML, aucun texte n'est donné pour l'élément P : normal, puisque notre texte est determiné à l'execution. Ors, pour donner une valeur à un noeud texte, il faut un noeud texte (ça va de soi). Ce noeud texte n'existe pas, puisque l'élément P ne contient rien, et donc l'invocation de firstChild produit une erreur, car le navigateur ne cré pas toujours de noeud texte par défaut vide (Internet Explorer ne le fait pas, par raison d'économie).
Solution : Le noeud texte ne peut pas être implicite, il faudra donc rendre sont existence explicite. Même si le contenu effectif n'est déterminé qu'à l'execution, il faut donner une valeur à l'élément P, dans le document HTML, pour que le DOM contienne un noeud texte à cet endroit là. On pourra utiliser simplement trois petit point par exemple ("..."). Ces trois petits points conviennent parfaitement à quelque choses qui ne connaitra qu'un bref instant d'affichage, avant d'être initialisé.
Il faut alors simplement remplacer le code HTML par
Le code JavaScript n'est pas en cause dans cette erreur, et il n'y a pas besoin de le modifier.
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <p id="messageArea">...</p>
Moralité : dans vos documents HTML, destinés à êtres utilisés pour du DHTML, initialisez toujours vos noeuds texte, même si leurs valeurs effectives ne sont determinés qu'à l'execution du programme JavaScript.
Détail subsidiaire : nous employons messageArea.firstChild.nodeValue, et non pas simplement messageArea.nodeValue, parce que le contenu texte est en fait un noeud enfant... anonyme... mais un noeud enfant quand-même.
Partager