Formulaire variable en javascript

Fermé
pillarofsummer - 24 mai 2012 à 16:29
 pillarofsummer - 25 mai 2012 à 09:29
Bonjour,
Je cherche désespérément un moyen de me sortir de la situation suivante qui me creuse les méninge depuis un certain temps...ça doit pourtant pas être si compliqué !!

Voilà l'affaire: j'ai un menu deroulant en html construit de cette facon

<FORM name="liste1" onsubmit="modif();"><center>Type de boîte
<SELECT name="list" size="1" >
<OPTION value="0" id="liste" >Gestionnaire</option>
<OPTION value="1" id="liste" >Directeur</option>
<OPTION value="2" id="liste" >Chef de travaux</option>
</SELECT>

Il y a , juste sous cette liste, des champs dans lesquels on entre des informations sur le type de personne que l'on a selectionné dans la liste. (Nom prénom mail...)

Cependant, le nombre de champs va varier en fonction du type de personne (gestionnaire, directeur ou chef e travux).

Il faut que je puisse changer simplement la zone où se trouvent les champs en fonction de la personne selectionnée

Si on clique sur gestionnaire: on aura par exemple

champ 1: [ ]
champ 2: [ ]

et si on clique sur chef de travaux, on aura 3 champs. (PAR exemple je précise)


J'ai essayé de coder cela de deux façons différentes: en utilisant l'id que j'ai donné avec getelementbyid(), ou en récupérant la value (0, 1 ou 2) dans l'url par une fonction javascript très simple faite maison.

GROS PROBLEME. Il semblerait que la fonction s'execute AVANT que le numéro (value) ne s'affiche dans l'URL. Donc, par défaut, la valeur sera toujours de 0. Au final, quel que soit l'endroit où je cliquerai, j'obtiendrai toujours les mêmes nouveau champs correspondant à la value 0 du gestionnaire et qui plus est dans une autre page HTML !! Je voudrais juste faire bouger dynamiquement la zone où se trouvent les champs.

C'est un peu barbare comme explications mais j'essaie d'être le plus clair possible.
Pour finir, voici le code de la fonction permettant la changement des champs en fonction de la personne selectionnée:


if(document.getElementById('liste').value == '0')
{
text="<center>champ1: <input type='text' name='champ1' size='20'><p>";
text+="champ2: <input type='text' name='champ1' size='20'><p>";
text+="champ3: <input type='text' name='champ1' size='20'><p></center>";
document.write(text);
}

else if(document.getElementById('liste').value == '1')
{
text2="champ1: <input type='text' name='champ1' size='20'><p>";
document.write(text2);
}

else if(document.getElementById('liste').value == '2')
{
text3+="champ1: <input type='text' name='champ1' size='20'><p>";
text3+="champ2: <input type='text' name='champ1' size='20'><p>"
document.write(text3);
}



Il y avait un second code qui me donne strictement la même chose:

function modif()
{
var i=urlgetpart();//Cette fonction renvoi le numéro (value) de la liste qui a été selectionné (donc 0,1 ou 2)

if(i==0)
{
text="<center><div>champ1: <input type='text' name='champ1' size='20'><p>";
text+="champ2: <input type='text' name='champ1' size='20'><p>";
text+="champ2: <input type='text' name='champ1' size='20'><p></div></center>"
document.write(text);

}

if(i==1)
{
text2="<center><div>champ2: <input type='text' name='champ1' size='20'><p>"; //Directeur
text2+="champ2: <input type='text' name='champ1' size='20'><p></div></center>";
document.write(text2);
}

if(i==2)
{
text3="<center><div>champ2: <input type='text' name='champ1' size='20'><p></div></center>";
document.write(text3); //Chef de travaux
}

Je doute fort que quelqu'un ait la patiente digne d'un moine tibétain de me répondre, mais j'aurais tenté le coup. J'ai parcouru tout le web pour trouver... et rien à faire.

Sur ceux bonne journée, et merci pour votre éventuelle patience.


2 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 mai 2012 à 21:45
l'id doit être dans la balise select pas dans option

une solution
<script type="text/javascript">
function affiche_champs(){	
	if(document.getElementById('liste').value !=-1){
		//on ne traite que si une ligne autre que le premiere "choisissez" a été cliquée
		document.getElementById('zone_champs').innerHTML=""; //on efface les champs eventuellement affichés
		if(document.getElementById('liste').value == '0')
		{
			var text="<center><p>champ1: <input type='text' name='champ1' size='20'></p>";
			text+="<p>champ2: <input type='text' name='champ2' size='20'></p>";
			text+="<p>champ3: <input type='text' name='champ3' size='20'></p></center>";
		
		}

		else if(document.getElementById('liste').value == '1')
		{
		var text="<p>champ1: <input type='text' name='champ1' size='20'></p>";
		
		}

		else if(document.getElementById('liste').value == '2')
		{
		var text="<p>champ1: <input type='text' name='champ1' size='20'></p>";
		text+="<p>champ2: <input type='text' name='champ2' size='20'></p>"
		}
		//ecriture des champs dans le div
		document.getElementById('zone_champs').innerHTML=text;
		
	}	
}
</script>
<FORM name="liste1" ><center>Type de boîte
<SELECT name="list" id="liste" size="1" onchange="affiche_champs();">
<OPTION value="-1" >--choisissez--</option> <!-- cette ligne obligatoire pour avoir un chnagement à tous les coups -->
<OPTION value="0" >Gestionnaire</option>
<OPTION value="1" >Directeur</option>
<OPTION value="2" >Chef de travaux</option>
</SELECT> 

<div id="zone_champs"><!-- ici seront ecrits les champs --></div>
0
pillarofsummer
25 mai 2012 à 09:29
CA MAAAARCHE VICTOOAAAAARREEUUUHH.

Très cher Alain_42, dieu vous bénisse !!!
Je me mettrais volontier à genou devant vous si vous vous teniez en face de moi actuellement vous me sortez d'une belle galère ! Merci infiniment !!
0