Problème de combinaison tableau associatif + tableau indicé

Résolu
salut,
j'ai un problème de combiné 2 tableau ( associatif + indicé )
mon petit programme n'exécute pas et je ne sais pas ou est le problème exactement
merci de m'aidez

<html>
<head>
<script type="text/javascript>

form={0:"text":{"label":"NCIN","name":"ZNCIN"},
1:"text":{"label":"nom et prenom","name":"ZNP"},
2:"select":{"label":"departement","name":"zdep","choix":[0:{"name":"TI","value":"technologie de l informatique"},1:{"name":"GM","value":"Genie mecanique"},2:{"name":"GE","value":"Genie electrique"}]},
3:boutton:{"name":"bvalider","value":"valider"}};

dessiner_formulaire=function()
{

for(i=0;i<form.length;i++)
{
for(indice in form[i] )
{
if(indice.indexOf("text",0)==0)
{
document.write(form[indice]["label"]+" : ");
document.write("<input type='text' name='"+form[indice]["name"]+"'><br>");
}
else{
if(indice.indexOf("select",0)==0)
{

for (i=0;i<form.indice.length;i++)
{
document.write(form[indice][i]["label"]+"<select> <option>form[2].choix[TI]</option> <option>form[2].choix[GM]</option> <option>form[2].choix[GE]</option></select>");
}
}
else{
if(indice.indexOf("boutton",0)==0)
{
document.write("<br> <input type='button' name='"+form.indice["name"]+"' value='"+form[indice]["value"]+"'><br>");
}
}
}
}
}

</script>
</head>
<body >
<form name="f">
<script language="javascript">
dessiner_formulaire();
</script>
</form>

</body>
</html>

4 réponses

  1. j'ai essayer de rectifier mais il y a encore des erreurs voir console d'erreur de FireFox
    et vas voir ce site:
    https://www.xul.fr/ecmascript/associatif.php
    <html>
    <head>
    <script type="text/javascript">
    //ci dessus il te manquait les " a la fin du type=
    
    var data_form=new Array();
     data_form[0]={"text":{"label":"NCIN","name":"ZNCIN"}};
     data_form[1]={"text":{"label":"nom et prenom","name":"ZNP"}};
     data_form[2]={"select":{"label":"departement","name":"zdep","choix",0:{"name":"TI","value":"technologie de l informatique"},1:{"name":"GM","value":"Genie mecanique"},2:{"name":"GE","value":"Genie electrique"}]}};
     data_form[3]={"boutton":{"name":"bvalider","value":"valider"}};
    dessiner_formulaire=function()
    {
    
    	for(i=0;i<form.length;i++)
    	{
    		for(var indice in form[i] ) //la le var
    		{
    			if(indice.indexOf("text",0)==0)
    			{
    				document.write(form[indice]["label"]+" : ");
    				document.write("<input type='text' name='"+form[indice]["name"]+"'><br>");
    			}
    			else{
    				if(indice.indexOf("select",0)==0)
    				{
    
    					for (i=0;i<form.indice.length;i++)
    					{
    					document.write(form[indice][i]["label"]+"<select> <option>form[2].choix[TI]</option> <option>form[2].choix[GM]</option> <option>form[2].choix[GE]</option></select>");
    					}
    				}
    				else{
    					if(indice.indexOf("boutton",0)==0)
    					{
    					document.write("<br> <input type='button' name='"+form.indice["name"]+"' value='"+form[indice]["value"]+"'><br>");
    					}
    				}
    			}
    		}
    	}
    } //il
    0
    1. merci pour votre aide
      j'ai essaye de corriger des fautes mais le console d'erreur de firefox m'affiche que ("choix" is not defiened ) et dans l'affichage sur le web il ya juste 2 case zone texte et il n y a pas la liste de roulante

      voici le code à nouveau

      <html>
      <head>
      <script type="text/javascript">

      var data_form=[
      {"text":
      {"label":"NCIN",
      "name":"ZNCIN"
      }
      },
      {"text":
      {"label":"nom et prenom",
      "name":"ZNP"
      }
      },
      {"select":
      {"label":"departement",
      "name":"zdep",
      "choix":
      [
      // indice 0
      {"name":"TI",
      "value":"technologie de l informatique"
      },
      // indice 1
      {"name":"GM",
      "value":"Genie mecanique"
      },
      // indice 2
      {"name":"GE",
      "value":"Genie electrique"
      }
      ] // fin du tableau "choix"
      }
      },
      {"boutton":
      {"name":"bvalider",
      "value":"valider"
      }
      }
      ];

      dessiner_formulaire=function()
      {

      for(i=0;i<data_form.length;i++)
      {
      for(var indice in data_form[i] )
      {
      if(indice.indexOf("text",0)==0)
      {
      document.write(data_form[i][indice]["label"]+" : ");
      document.write("<input type='text' name='"+data_form[i][indice]["name"]+"'><br>");
      }
      else{
      if(indice.indexOf("select",0)==0)
      {

      for (j=0;j<data_form[i][indice][choix].length;j++)
      {
      document.write(data_form[i][indice]["label"]+"<select> <option>data_form[i].select.choix[j]</option> <option>data_form[i].select.choix[j] </option><option>data_form[i].select.choix[j]</option></select>");
      }
      }
      else{
      if(indice.indexOf("boutton",0)==0)
      {
      document.write("<br> <input type='button' name='"+data_form.indice["name"]+"' value='"+data_form[indice]["value"]+"'><br>");
      }
      }
      }
      }
      }
      }

      </script>
      </head>
      <body >
      <form name="f">
      <script language="javascript">
      document.write(dessiner_formulaire());
      </script>
      </form>

      </body>
      </html>
      0
      1. j'ai pas mal progressé il reste une petite erreu undefined.
        Attention dans <script il faut type="text/javascript"
        dans les balise html la valeur des arguments doit être entre "

        ex name="...."
        <html> 
        <head> 
        <script type="text/javascript"> 
        
        var data_form=[ 
        {"text":{"label":"NCIN","name":"ZNCIN"}}, 
        {"text":{"label":"nom et prenom","name":"ZNP"}}, 
        {"select":{"label":"departement","name":"zdep","choix":[ 
        // indice 0  //// j'ai inversé name et value
        {"value":"TI","name":"technologie de l informatique"}, 
        // indice 1 
        {"value":"GM","name":"Genie mecanique"}, 
        // indice 2 
        {"value":"GE","name":"Genie electrique"} 
        ] // fin du tableau "choix" 
        }}, 
        {"boutton":{"name":"bvalider","value":"Valider"}}]; 
        
        dessiner_formulaire=function() 
        { 
         for(i=0;i<data_form.length;i++) 
         { 
          for(var indice in data_form[i] ) 
          { 
           if(indice.indexOf("text",0)==0) 
           { 
            document.write(data_form[i][indice]["label"]+" : "); 
            document.write('<input type="text" name="'+data_form[i][indice]['name']+'" /><br>'); 
           } 
           else{ 
            if(indice.indexOf("select",0)==0) 
            { 
              document.write(data_form[i][indice]['label']+'<select name="'+data_form[i][indice]['name']+'">'); 
              for (k=0;k<data_form[i][indice]['choix'].length;k++) 
              { 
               document.write('<option value="'+data_form[i][indice]['choix'][k]['value']+'">'+data_form[i][indice]['choix'][k]['name']+'</option>'); 
              } 
             document.write('</select>'); 
            } 
            else{ 
             if(indice.indexOf("boutton",0)==0) 
             { 
              document.write('<br> <input type="submit" name="'+data_form[i][indice]['name']+'" value="'+data_form[i][indice]['value']+'" /><br>'); 
             } 
            } 
           } 
          } 
         } 
        } 
        
        </script> 
        </head> 
        <body > 
        <form name="f" method="post" action=""> 
        <script  type="text/javascript"> 
        document.write(dessiner_formulaire()); 
        </script> 
        </form> 
        
        </body> 
        </html>
        0
        1. merciiiiii beaucoup pour ton aide :)
          pour l "undefined " j'ai rien à faire je la laissé comme ça pour le moment

          :)
          0
          1. bonsoir, ça me taquinait un peu ce pb de Undefinied

            il faut mettre:
            <form name="f" method="post" action=""> 
            <script  type="text/javascript"> 
            dessiner_formulaire(); 
            </script> 
            </form>


            et pas document_write(dessiner_formulaire()) car l'instruction document_write est déja dans la fonction
            0
          2. ouii ça marche tres tres bien merci bcp pour votre attention et surtt pour votre aide :)
            0