J'ai écrit du Javascript pour permettre la modification d'une liste d'éléments dans un formulaire HTML, y compris l'ajout et la suppression d'éléments. Je l'ai eu dans Firefox. En l'essayant dans Internet Explorer, j'ai constaté que les éléments ajoutés n'étaient pas soumis avec le formulaire. Longue histoire courte ... beaucoup de simplification, débogage, compris quelle ligne déclenche IE pour ignorer la nouvelle entrée de formulaire. Donc, le problème de comportement est résolu.IE ne soumet pas; éléments de formulaire ajoutés dynamiquement; est-ce un bug IE?
Mais maintenant je dois demander: Pourquoi? Est-ce un bug IE?
Voici le code simplifié:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function add() {
div = document.getElementById("mylist");
// *** Adding text here works perfectly fine. ***
div.innerHTML += " ";
e = document.createElement("input");
e.setAttribute("type", "text");
e.setAttribute("name", "field3");
e.setAttribute("value", "--NEWVALUE--");
div.appendChild(e);
// *** Adding text here works perfectly fine in Firefox, but for
// Internet Explorer it causes field3 to not be submitted. ***
//div.innerHTML += " ";
}
</script>
</head>
<body>
<form action="" method="get">
<div id="mylist">
<input type="text" name="field1" value="value1" />
<input type="text" name="field2" value="value2" />
</div>
<a href="javascript:" onclick="add()" />Add</a>
<input type="submit" value="Submit" />
</form>
</body>
</html>
Pour l'essayer, faire l'évidence: la charge dans IE, cliquez sur Ajouter, cliquez sur Envoyer, regardez ce qui est dans la barre d'adresse. Si vous décommentez la dernière ligne dans add()
, IE cessera soudainement de signaler field3
. Cela fonctionne très bien dans Firefox.
Des idées? Un esprit curieux veut savoir. (Et comment est-ce que j'ajouterais le texte là si nécessaire, de manière portative, donc IE est heureux?)
1 à éviter setAttribute. -1 sur l'appel createElement-with-markup, qui est un bidouillage IE-only extrêmement flippant. – bobince
Je suis d'accord sur le fait qu'il s'agit d'un hack - c'est pourquoi je suggère que l'affiche essaie de définir les propriétés en premier. Si ça ne marche pas, je ne vois pas d'autre moyen de faire ce qu'il veut. – levik