un objet de formulaire en boucle [résolu]

un objet de formulaire en boucle [résolu] - HTML/CSS - Programmation

Marsh Posté le 10-10-2010 à 00:08:24    

Bonjour,
 
Bon, le titre n'est vraiment pas clair parce que j'avoue que ma question est assez complexe.
 
En fait, j'ai un formulaire composé en deux parties.
 
Tout d'abord, une partie avec une petite dizaine de checkbox.
En sélectionnant celles-ci (deux possibles (jusque là, je gère ;) )), je dois agir sur la deuxième partie.  
 
Dans cette deuxième partie, j'ai beaucoup (vraiment beaucoup  :whistle: ) de checkbox.
 
J'ai deux problèmes qui se posent à moi.  
Tout d'abord, les noms des checkbox ne se suivent pas numériquement (je peux avoir check_1, check_2 et check_4 (donc pas de check_3 :D )).
Ensuite, comme il y en a vraiment beaucoup (si si), j'ai voulu tenter d'incrémenter les noms dans une boucle, du genre
 

Code :
  1. function valide_check(form)
  2.         {
  3.          for (var i=1;i<=128;i++)
  4.             {
  5.             if (typeof(form.check_+i) != "undefined" )
  6.                 {
  7.                 form.check_+i.checked=true;               
  8.                 }
  9.             }
  10.          }


La condition réponds toujours vraie alors que ce n'est pas le cas.
 
Je suppose donc qu'il y a une erreur, ou alors je suis un gros rêveur, et ce n'est pas possible.
 
Merci d'avance de votre aide !


Message édité par Kai-Ho le 12-10-2010 à 13:37:34

---------------
http://www.lancedragon.fr
Reply

Marsh Posté le 10-10-2010 à 00:08:24   

Reply

Marsh Posté le 10-10-2010 à 22:58:23    

Pour info, j'ai tenté de nombreuses choses, du genre

Code :
  1. function valide_check(form)
  2.         {
  3.          for (var i=1;i<=128;i++)
  4.             {
  5.             if (typeof(document.getElementById("check_"+i)) != "undefined" )
  6.                 {
  7.                 form.document.getElementById("check_"+i).checked=true;               
  8.                 }
  9.             }
  10.          }


Sans plus de succès...
 
Personne n'a une idée de la faisabilité de la chose ?


---------------
http://www.lancedragon.fr
Reply

Marsh Posté le 11-10-2010 à 00:21:51    

J'ai donc des checkbox dans ma première partie qui renvoie une variable (ei_1 ou ei_2)
Mais ma page php a créé une deuxième partie dans laquelle il y a beaucoup de checkbox en face d'un texte. Je désactive la checkbox et grise le texte si la valeur de ei est égale à un champ caché correspondant à mon deuxième checkbox...
 
Je sais, c'est un peu tordu, mais le script suivant fonctionne sans problème, mais avec plus de 120 checkbox, j'aurais voulu éviter de tous les écrire.
 

Code :
  1. if (typeof(form.name_1_3) != "undefined" )
  2.   {
  3.   if ((form.ecole_1_3.value==ei_1) || (form.ecole_1_3.value==ei_2))
  4.    {
  5.    form.name_1_3.checked=false;
  6.    form.name_1_3.disabled=true;
  7.    document.getElementById("td_ecole_1_3" ).style.color='gray';
  8.    }
  9.   else
  10.    {
  11.    form.name_1_3.disabled=false;
  12.    document.getElementById("td_ecole_1_3" ).style.color='black';
  13.    }
  14.   }


---------------
http://www.lancedragon.fr
Reply

Marsh Posté le 11-10-2010 à 08:08:58    

Salut
En gros, tu veux faire comme ici : (mon site)
view-source:http://membres.multimania.fr/yarflam/BaballEd.html

 
Citation :

j'aurais voulu éviter de tous les écrire.


J'ai utilisé pour ça du ms-dos, qui m'a rapidement généré 400*3 donc 1200 objets dans ma page web. (1414 lignes en tout)
C'est peut-être pas le meilleur moyen, mais ça fait gagner du temps aux visiteurs et à toi ! :) Voilà, sinon ton script est un peux confus. Je croyais que les numéros ne se suivaient pas, et où sont les conditions pour les éviter ?


Message édité par cetplus le 11-10-2010 à 08:13:12
Reply

Marsh Posté le 11-10-2010 à 10:14:03    

Je me doutais que je n'avais pas été clair :pfff:  
 
En fait, j'ai créé mon formulaire en php. Donc, de ce côté, pas de souci, mes 100 checkbox sont générés.
 
Voilà tel que cela se présente :
Une première partie avec 8 checkbox :
 

Code :
  1. <td width='10'>
  2.                                     <input type='checkbox' name='ei_1' id='ei_1'  onClick='compteur_ei(this.form,this,$nbre_ei)'>
  3.                                 </td>
  4.                                 <td width='150' id='td_ei_1' style='$style_ei_1'>
  5.                                      <font face='$police' size='2'>Abjuration</font>
  6.                                 <td>
  7.                                 <td width='10'>
  8.                                     <input type='checkbox' name='ei_2' id='ei_2'  onClick='compteur_ei(this.form,this,$nbre_ei)'>
  9.                                 </td>
  10.                                 <td width='150' id='td_ei_2' style='$style_ei_2'>
  11.                                      <font face='$police' size='2'>Divination</font>
  12.                                 <td>


En voilà 2 mais les 6 autres se présentent de la même façon.
 
Ensuite, la deuxième partie, générant jusqu'à une centaine de checkbox.
 
 

Code :
  1. <td width='10'>
  2.                                 <input type='checkbox' name='$id' id='$id'>
  3.                             </td>
  4.                             <td width='230' id='td_$ecole'>
  5.                                 <font face='$police' size='2'>$nom_sort</font>
  6.                                 <input type='hidden' name='$ecole' id='$ecole' value='$ecole_sort'>
  7.                             </td>


 
Pour mieux comprendre, chaque zone se compose de la même manière
     

  • Une checkbox (dont le nom est composé comme suit : name_1_1, name_1_2, name_1_3, etc...)

   

  • Un nom qui peut être grisé en modifiant l'id du td composé comme suit : td_ecole_1_1, td_ecole_1_2, td_ecole_1_1, etc...

   

  • Un input caché permettant d'identifier la checkbox par rapport à ma première zone. le nom et l'id sont composés comme suit : ecole_1_1, ecole_1_2, ecole_1_3, etc... Pour la valeur, il y en a 8 possibles...


Ensuite, je veux que lorsque je clique dans une checkbox de la première partie, les éléments de la seconde partie qui ont une valeur égale à la première se désactivent.
 
Voici le script qui fonctionne

Code :
  1. if (typeof(form.name_1_1) != "undefined" )
  2.              {
  3.               if ((form.ecole_1_1.value==ei_1) || (form.ecole_1_1.value==ei_2))
  4.                 {
  5.                 form.name_1_1.checked=false;
  6.                 form.name_1_1.disabled=true;
  7.                 document.getElementById("td_ecole_1_1" ).style.color='gray';
  8.                 }
  9.               else
  10.                 {
  11.                 form.name_1_1.disabled=false;
  12.                 document.getElementById("td_ecole_1_1" ).style.color='black';           
  13.                 }
  14.              }
  15.            if (typeof(form.name_1_2) != "undefined" )
  16.             {
  17.             if ((form.ecole_1_2.value==ei_1) || (form.ecole_1_2.value==ei_2))
  18.                 {
  19.                 form.name_1_2.checked=false;
  20.                 form.name_1_2.disabled=true;
  21.                 document.getElementById("td_ecole_1_2" ).style.color='gray';
  22.                 }
  23.             else
  24.                 {
  25.                 form.name_1_2.disabled=false;
  26.                 document.getElementById("td_ecole_1_2" ).style.color='black';           
  27.                 }
  28.             }


 
Mais comme j'ai quand même plus d'une centaine de checkbox générée, j'aurais voulu trouver un moyen plus rapide, en utilisant une boucle, comme je l'ai expliqué plus haut, du genre :
 

Code :
  1. for (var i=1;i<=128;i++)
  2.             {
  3.            if (typeof(form.name_1_+i) != "undefined" )
  4.             {
  5.             if ((form.ecole_1_+i.value==ei_1) || (form.ecole_1_+i.value==ei_2))
  6.                 {
  7.                 form.name_1_+i.checked=false;
  8.                 form.name_1_+i.disabled=true;
  9.                 document.getElementById("td_ecole_1_"+i).style.color='gray';
  10.                 }
  11.             else
  12.                 {
  13.                 form.name_1_+i.disabled=false;
  14.                 document.getElementById("td_ecole_1_"+i).style.color='black';           
  15.                 }
  16.             }


J'ai vraiment essayé beaucoup de choses différentes, mais sans succès :cry:


---------------
http://www.lancedragon.fr
Reply

Marsh Posté le 12-10-2010 à 13:36:49    

Pour ceux que ça intéresse, j'ai trouvé la solution
 

Code :
  1. for (var i=1;i<=128;i++)
  2.             {
  3.            if (typeof(form.elements['name_1_' + i]) != "undefined" )
  4.             {
  5.             if ((form.elements['ecole_1_'+i].value==ei_1) || (form.elements['ecole_1_'+i].value==ei_2))
  6.                 {
  7.                 form.elements['name_1_'+i].checked=false;
  8.                 form.elements['name_1_'+i].disabled=true;
  9.                 document.getElementById("td_ecole_1_"+i).style.color='gray';
  10.                 }
  11.             else
  12.                 {
  13.                 form.elements['name_1_'+i].disabled=false;
  14.                 document.getElementById("td_ecole_1_"+i).style.color='black';           
  15.                 }
  16.             }


 
Ca fonctionne nickel !


---------------
http://www.lancedragon.fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed