IE : impossible de changer le name d'un input

dodoletesteur -  
incaout Messages postés 347 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'utilise le code suivant pour ajouter des blocs de formulaire à la demande :

var counter = 0;
function moreFields() {
	counter++;
	var newFields = document.getElementById('bloc_matiere').cloneNode(true);
	newFields.id = '';
	newFields.style.display = 'block';
		
	var newField1 = newFields.childNodes;

	for (var i=0;i<newField1.length;i++) {
		  var theName1 = newField1[i].name;
                  newField1[i].name = theName1 + counter;
       }
}


Le problème, comme d'habitude, c'est que ça marche du tonnerre sous FF et Chrome, mais pas sous IE... Apparemment, IE ne permet pas de changer l'attribut "name" d'un objet :-(

J'ai pourtant besoin de modifier les noms des champs, puisqu'il s'agit de les ajouter à un formulaire et de les traiter !

Ce manque d'IE vous a-t-il aussi gêné ? Auriez-vous une solution de remplacement pour le même effet ?

Merci bien !
A voir également:
  • IE : impossible de changer le name d'un input
  • Ie tab - Télécharger - Outils pour navigateurs
  • Ie 11 - Télécharger - Navigateurs
  • Ie 8 - Télécharger - Navigateurs
  • Ie 9 - Télécharger - Navigateurs
  • Ie 10 - Télécharger - Navigateurs

5 réponses

incaout Messages postés 347 Date d'inscription   Statut Membre Dernière intervention   74
 
Salut.

Essayes avec ceci dans ta boucle.

newField1[i].setAttribute("name", theName1 + counter);

J'ai fait des tests sur un autre exemple et la méthode en elle même fonctionne sous IE 6.1 . Mais peut être que ton problème se situe ailleurs.

Cdlt

IC
0
dodoletesteur
 
J'ai essayé ton astuce, mais ça ne fonctionne toujours pas. Pis, IE y trouve une erreur et FF ne veut plus l'interpréter...

Je peux confirmer que c'est bien de là que vient l'erreur, car si je supprime la ligne
newField1[i].name = theName1 + counter;

j'ai bien l'ajout de mon bloc comme voulu (sous IE et FF), mais les clones ne sont pas renommés...

Une autre idée ?
0
Alain_42 Messages postés 5413 Statut Membre 894
 
essayes avec:

newField1[i].name = eval(theName1 + counter);
0
dodoletesteur
 
Toujours pas !

L'erreur vient du LHS (newField[i].name), en particulier de la propriété "name" qui semble non reconnue par IE.

N'existe-t-il pas une alternative à ce code ? C'est quand même fou que ce ne soit pas possible de changer le nom d'un champ !..
0
incaout Messages postés 347 Date d'inscription   Statut Membre Dernière intervention   74
 
Salut,

J'ai peut être un début de réponse à ton problème.

J'ai recopié ton code pour le tester dans une page. J'ai créé un DIV qui contient 2 champs "input" avec comme nom champ1 et champ2. Je ne sais pas ce que contient ton DIV.

En fait dans mon cas, la propriété name est bien reconnu pour les input et le changement de nom fonctionne. Mais il y a deux autres éléments dans le tableau newField.

En fait tu as :

newField[0] => input
newField[1] => #text
newField[2] => input
newField[3] => #text

Les éléments #text ne supporte pas la propriété name et provoque l'erreur. Je pense qu'ils doivent correspondre à la valeur que le champ peut prendre, mais je ne suis pas sur de cela.

Peut être as tu aussi dans ton tableau des éléments que tu ne soupçonnes pas et qui ne sont pas compatibles avec la propriété name.

Peut être peux tu dans ta boucle afficher le type de chaque noeud rencontré au sein du tableau

for (var i=0;i<newField1.length;i++)
{
alert(newField1[i].nodeName);
var theName1 = newField1[i].name;
alert(theName1);
}

En ajoutant une condition sur le type de node au sein de la boucle, le code suivant fonctionne chez moi alors que sans la condition, il plantait :

var counter = 0;
function moreFields()
{
counter++;
var newFields = document.getElementById('bloc_matiere').cloneNode(true);
newFields.id = '';
newFields.style.display = 'block';

var newField1 = newFields.childNodes;

for (var i=0;i<newField1.length;i++)
{
if(newField1[i].nodeType == 1)
{
var theName1 = newField1[i].name;
alert(theName1);

newField1[i].name = theName1 + counter;
alert(newField1[i].name);
}
}
}

J'espère que cela pourra t'aider à résoudre ton pb.
Cordialement

IC
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5413 Statut Membre 894
 
0