[PHP][DOM] balises select non envoyé au serveur

balises select non envoyé au serveur [PHP][DOM] - PHP - Programmation

Marsh Posté le 13-12-2007 à 19:16:02    

Bonjour,
 
J'ai un tableau d'une 30aine de colone contenant des balises select.  
 
Je me suis créé un un bouton qui me permet de dupliquer une ligne. Je l'ai fais avec DOM en javascript avec la fonction cloneNode.  
 
Puis toujours avec j'ai renomé les attributs name des nouveaux select pour différencier les champs avec la ligne qui a servi de copie. J'ai controlé à l'aide de Firebug, les attributs sont bien renommé.  
 
Lorsque je submit mon formulaire, les champs nouvellement créé n'apparraissent pas dans print_r($_POST).  
 
J'ai essayé les 2 méthodes pour changer les attribut name avec :  
- element.name = "jour_1";
et - element.setAttribute("name", "jour_1" );
 
Ou ai je fauté ?  
 
Est ce que l'on peux reelement creer des elements d'un formulaire coté client avec DOM en javascript pour ensuite pouvoir exploiter les informations coté serveur ?  
J'ai l'impression que non, car ce sont uniquement mes select créé coté client qui ne sont pas envoyés.

Reply

Marsh Posté le 13-12-2007 à 19:16:02   

Reply

Marsh Posté le 13-12-2007 à 19:54:20    

Tu utilises un appendChild ou une méthode du style pour insérer ta ligne dans le document ?

Reply

Marsh Posté le 13-12-2007 à 20:59:15    

j'avais ecrit ce code il y a bien longtemps :

Code :
  1. <html>
  2. <head>
  3. <script>
  4. i=0
  5. function nouv_mail()
  6. {
  7.  i++;
  8.  noeud_span = document.createElement('span')
  9.  noeud_input = document.createElement('input')
  10.  noeud_br = document.createElement('br')
  11.  noeud_text = document.createTextNode('Mail '+i)
  12.  noeud_span.appendChild(noeud_text)
  13.  noeud_input.setAttribute('name','mail'+i)
  14.  document.frm.appendChild(noeud_span)
  15.  document.frm.appendChild(noeud_input)
  16.  document.frm.appendChild(noeud_br)
  17. }
  18. </script>
  19. </head>
  20. <body>
  21.  <input type="button" value="Nouveau mail" onclick="nouv_mail()" />
  22.  <input type="button" value="Envoyer" onclick="document.frm.submit()" />
  23.  <form name="frm" action="post.php" method="GET">
  24.   <br>
  25.  </form>
  26. </body>
  27. </html>


 
il doit toujours fonctionner ...
 


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 14-12-2007 à 12:02:31    

naceroth a écrit :

Tu utilises un appendChild ou une méthode du style pour insérer ta ligne dans le document ?


 
Apres avoir fais un clone de ma ligne j'utilise un insertBefore sur le noeud de la table mais le principe reste le meme que le appendChild
 
Voici ma fonction lorsque je clique sur mon bouton "Ajout Projet" qui est dans mon tableau :
 
 
//Chaque ligne est reference par un id "ligne" + ligne qui est une variable qui s'incremente à chaque ligne
 

Code :
  1. function ajoutProjet(ligne)
  2. {
  3. var ligneACopier = document.getElementById("ligne" + ligne);
  4. var table = ligneACopier.parentNode;
  5. var ligneClone = ligneACopier.cloneNode(true);
  6. table.insertBefore(ligneClone, ligneACopier);
  7.        
  8.        //Traitement pour mettre à jour les attributs.  
  9. var tousLesSelect = ligneClone.getElementsByTagName ("select" );
  10. //Recuperation du nombre de projet
  11. var nbProjet = document.getElementById("nbprojet" );
  12. var attri;
  13. //Mise à jour du nombre de projet
  14. nbProjet.value=parseInt(nbProjet.value)+1;
  15. //Mise à jour des attributs name
  16. for (var i = 0 ; i < tousLesSelect.length ; i++)
  17. {
  18.  //is_ignorable : hack pour Firefox à cause des espaces
  19.  if (is_ignorable (tousLesSelect[i]) == false && tousLesSelect[i].hasAttribute("name" ))
  20.  {
  21.   //attri = tousLesSelect[i].getAttribute("name" );
  22.   attri = tousLesSelect[i].name;
  23.   attri = attri.substring(0,attri.lastIndexOf("_" ));
  24.   //tousLesSelect[i].setAttribute("name", attri+"_"+nbProjet.value);
  25.   tousLesSelect[i].name = attri+"_"+nbProjet.value;
  26.  }
  27. }
  28. //Mise à jour de l'attribut id du tr cloné
  29. ligneClone.id = "ligne"+nbProjet.value;
  30. }


 
 
 
pierreC, curieux que tu ne recupere pas le node/noeud de ton formulaire. Tu l'appelles directement par document.frm. Je ne savais que l'on pouvait le faire avec un appendChild.  
 
 
Le plus furstrant dans tout ca, c'est que l'ajout fonctionne super bien, syntaxiquement au niveau html généré ca a l'air d'etre ok quand on inspecte les differents élements de la page (select, ligne, ...) avec firebug mais les données sont pas du tout envoyés :(

Reply

Marsh Posté le 17-12-2007 à 22:03:09    

any idea ?

Reply

Marsh Posté le 17-12-2007 à 22:51:27    

avec firebug analyse la gueule de ton select dans le DOM

Reply

Marsh Posté le 19-12-2007 à 00:05:11    

gatsu35 a écrit :

avec firebug analyse la gueule de ton select dans le DOM


 
 
Firebug est mon principal outil de travail. Justement cela a la meme gueule que les autres généré directement par le serveur ...
 
Les points vérifiés  

  • ils sont bien entre la balise form
  • l'atteribut name est bien renommé (ici jour1_5_2)  pour qu'il soit unique sur la page


Code :
  1. <td>
  2. <select name="jour1_5_2" onchange="updateTotal(this);">
  3. <option selected="">0 </option>
  4. <option>0.5 </option>
  5. <option>1 </option>
  6. </select>
  7. </td>


 
 
j'etais bien content avec mon DOM, mais cela me sert malheuresement à rien. Comme je n'ai pas besoin de dupliquer à l'infini mais juste en double, je vais juste cacher la ligne ou sinon besoin. La ligne sera donc directement par le serveur est aura l'attribut visibility à hidden  ou non ....

Reply

Sujets relatifs:

Leave a Replay

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