Bonjour,
Je rencontre un phénomène bizarre avec Firefox en utilisant la fonction getElementsByName.
L'idée, c'est que j'ai un formulaire HTML avec un champ "input" de type "text" qui a pour attribut name la valeur "vrh". L'utilisateur doit pouvoir ajouter/supprimer d'autres champs texte du même type.
J'ai donc une fonction javascript qui insère un champ texte (j'utilise pour cela les fonctions DOM comme createElement et setAttribute). L'ajout de champs texte fonctionne bien. Voici un extrait de code, pour ceux que ça intéresse:
Pour la suppression des éléments, j'ai écrit une fonction qui supprime le dernier champ texte ajouté (= le dernier noeud de la div). Voici un extrait du code (qui fonctionne):
Jusqu'ici tout va bien.
Là où ça se complique, c'est que je voudrais parfois cacher le lien "Supprimer" qui permet à l'utilisateur de supprimer un champ (c'est en cliquant sur ce lien que la fonction ci-dessus est appelée). Par exemple, je veux cacher le lien "Supprimer" quand il n'y a qu'un seul champ (il doit y en avoir au moins un).
J'ai donc modifié la seconde fonction (celle qui supprime), comme ceci:
Comme ça ne fonctionnait pas correctement (le lien "Supprimer" était caché quand il restait deux champs textes au lieu d'un seul), j'ai rajouté les deux alertes en rouge.
Verdict: le nombre d'éléments dans la liste "listeH" diminue lorsque je supprime le noeud de l'arbre. J'obtiens les affichages "nbAvant = 3" et "nbAprès = 2". Alors que je n'ai rien changé dans la liste.
Je ne constate cela que sous Firefox (j'ai la version 3.0.8). D'après moi, la liste n'a pas à être modifiée par la suppression d'un élément dans l'arbre.
Est-ce un bug connu ? Quelqu'un a-t-il déjà rencontré ce cas ?
Merci d'avance
Modifié par jiber2fr (22 Apr 2009 - 14:49)
Je rencontre un phénomène bizarre avec Firefox en utilisant la fonction getElementsByName.
L'idée, c'est que j'ai un formulaire HTML avec un champ "input" de type "text" qui a pour attribut name la valeur "vrh". L'utilisateur doit pouvoir ajouter/supprimer d'autres champs texte du même type.
J'ai donc une fonction javascript qui insère un champ texte (j'utilise pour cela les fonctions DOM comme createElement et setAttribute). L'ajout de champs texte fonctionne bien. Voici un extrait de code, pour ceux que ça intéresse:
var e = document.createElement("input");
e.setAttribute("type", "text");
e.setAttribute("name", "vrh");
e.setAttribute("size", "6");
e.setAttribute("maxLength", "5");
maDiv.appendChild(e);
Pour la suppression des éléments, j'ai écrit une fonction qui supprime le dernier champ texte ajouté (= le dernier noeud de la div). Voici un extrait du code (qui fonctionne):
var listeH = document.getElementsByName("vrh");
if(listeH.length >= 2){
// Je récupère le dernier résultat de getElementsByName
var aSuppr = listeH[listeH.length-1];
// Je le supprime
aSuppr.parentNode.removeChild(aSuppr);
}
Jusqu'ici tout va bien.
Là où ça se complique, c'est que je voudrais parfois cacher le lien "Supprimer" qui permet à l'utilisateur de supprimer un champ (c'est en cliquant sur ce lien que la fonction ci-dessus est appelée). Par exemple, je veux cacher le lien "Supprimer" quand il n'y a qu'un seul champ (il doit y en avoir au moins un).
J'ai donc modifié la seconde fonction (celle qui supprime), comme ceci:
var listeH = document.getElementsByName("vrh");
if(listeH.length >= 2){
// Je récupère le dernier résultat de getElementsByName
var aSuppr = listeH[listeH.length-1];
// Je le supprime
[#red]alert("nbAvant = "+listeH.length);
[#green]aSuppr.parentNode.removeChild(aSuppr);
[#red]alert("nbAprès = "+listeH.length);[#green]
// Je cache éventuellement le lien supprimer
if(listeH.length == 2){
// Je cache le lien supprimer car il y avait 2 champs texte avant que j'en supprime un (il n'y en a donc plus qu'un)
document.getElementById("lienSupprimerVR").style.display = "none";
}
}
Comme ça ne fonctionnait pas correctement (le lien "Supprimer" était caché quand il restait deux champs textes au lieu d'un seul), j'ai rajouté les deux alertes en rouge.
Verdict: le nombre d'éléments dans la liste "listeH" diminue lorsque je supprime le noeud de l'arbre. J'obtiens les affichages "nbAvant = 3" et "nbAprès = 2". Alors que je n'ai rien changé dans la liste.
Je ne constate cela que sous Firefox (j'ai la version 3.0.8). D'après moi, la liste n'a pas à être modifiée par la suppression d'un élément dans l'arbre.
Est-ce un bug connu ? Quelqu'un a-t-il déjà rencontré ce cas ?
Merci d'avance

Modifié par jiber2fr (22 Apr 2009 - 14:49)