Retouver le form englobant sans partir d'un element

Retouver le form englobant sans partir d'un element - HTML/CSS - Programmation

Marsh Posté le 20-08-2008 à 10:13:40    

Bonjour, je reconnais que ma question est pas mal tordue, j'ai cherché mais j'ai rien trouvé la dessus. En fait, j'ai besoin de retrouver le form qui englobe la balise <script> qui contient mon code, ceci pour faire des trucs qui, je le pense ne sont pas importantes pour ma question (à moins que vous vouliez savoir).
Je ne sais pas comment faire, ni si c'est possible de retrouver cette balise <form> sans avoir reference à aucun element de la DOM au depart...  
Pour info, j'utilise PrototypeJS comme framework.
 
Merci bien !

Reply

Marsh Posté le 20-08-2008 à 10:13:40   

Reply

Marsh Posté le 20-08-2008 à 10:16:56    

Si le code est dans un fichier externe, genre :

Code :
  1. <form method="post" action="pouet">
  2.   <div>
  3.      <script type="text/javascript" src="supercode.js"></script>
  4.      ....
  5.   </div>
  6. </form>


Et à condition que ce code n'est appellé qu'une seule fois (évidemment), tu peux toujours récupérer tous les <script>, regarder lequel a le bon src, puis itérer sur les parents et voilà [:dawa]

Reply

Marsh Posté le 20-08-2008 à 10:21:34    

Ouais, mais c'est en inline :p
Puis, c'est assez bourrin !
J'ai aussi déjà une fonction qui permet de recuperer le form englobant à partir d'un element :

Code :
  1. function getSurroundingForm(oElement) {
  2.   if (!oElement) {
  3.     return null;
  4.   }
  5.  
  6.   if (oElement.nodeName.match(/^form$/i)) {
  7.     return oElement;
  8.   }
  9.  
  10.   return getSurroundingForm(oElement.parentNode);
  11. }


Elle fonctionne déjà très bien, et du coup, j'aurais pensé ecrire une balise quelconque dans la dom, juste apres le script, executer cette fonction dessus, et virer l'élement.  
J'essaie de suite, pour voir

Reply

Marsh Posté le 20-08-2008 à 10:30:06    

Je suis con : fou un id sur le script et pis voilà [:dawa]

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  3. <head>
  4.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.  <title></title>
  6. </head>
  7. <body>
  8.  <div>
  9.   <form action="pouet.php" method="post">
  10.    <div>
  11.     <script id="ze-script" type="text/javascript">
  12.      window.onload = function() {
  13.       var script = document.getElementById('ze-script');
  14.       var parent = script.parentNode;
  15.       while(parent.tagName.toLowerCase() !== 'form') {
  16.        parent = parent.parentNode;
  17.       }
  18.       alert(parent.action);
  19.      }
  20.     </script>
  21.    </div>
  22.   </form>
  23.  </div>
  24. </body>
  25. </html>

Reply

Marsh Posté le 20-08-2008 à 10:30:50    

Ou un id sur le form en fait :D Maintenant je ne sais pas trop si ton script est utilisé à plusieurs endroits [:petrus dei]

Reply

Marsh Posté le 20-08-2008 à 10:35:28    

FlorentG a écrit :

Je suis con : fou un id sur le script et pis voilà [:dawa]

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  3. <head>
  4.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.  <title></title>
  6. </head>
  7. <body>
  8.  <div>
  9.   <form action="pouet.php" method="post">
  10.    <div>
  11.     <script id="ze-script" type="text/javascript">
  12.      window.onload = function() {
  13.       var script = document.getElementById('ze-script');
  14.       var parent = script.parentNode;
  15.       while(parent.tagName.toLowerCase() !== 'form') {
  16.        parent = parent.parentNode;
  17.       }
  18.       alert(parent.action);
  19.      }
  20.     </script>
  21.    </div>
  22.   </form>
  23.  </div>
  24. </body>
  25. </html>



je crois que je suis aussi con que toi :D
 
ha mais, le script est utilisé plein plein de fois ... hummm, en fait, je genere ce javascript par PHP (crado ou pas, c'est comme ça :D) pour faire des controles avancées (du genre datepicker, etc) et depuis longtemps, le coté PHP doit connaitre le nom du formulaire pour que ça fonctionne bien, on doit virer cette contrainte (projet Mediboard)

Reply

Marsh Posté le 20-08-2008 à 10:36:29    

Fout un id aléatoire au pire, si tu peux tout générer

Reply

Marsh Posté le 20-08-2008 à 10:51:07    

Je peux tout generer, j'essaie avec ça. Je peux aussi mettre une variable globale ou statique incrementée pour etre sur

Reply

Marsh Posté le 20-08-2008 à 10:54:06    

Bon, ça à l'air de marcher avec uniqid(rand(), true);
Si on generer 2 fois le meme ID dans la meme page, on a vraiment pas de bol quand même, mais vu la taille du projet, ça doit bien déjà exister un generateur de uuid

Reply

Marsh Posté le 20-08-2008 à 11:15:38    

Bon, ca marche, mais ca implique pas mal de code JS généré en PHP (encore plus qu'avant). Je pense que je vais refactorer tout ça, et presque tout faire du coté JS.
 
En tout cas merci de ton aide !! :)

Reply

Marsh Posté le 20-08-2008 à 11:15:38   

Reply

Marsh Posté le 20-08-2008 à 11:16:01    

Yes :)

Reply

Sujets relatifs:

Leave a Replay

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