[javascript] passage de zone à zone [résolu mais moche]

passage de zone à zone [résolu mais moche] [javascript] - HTML/CSS - Programmation

Marsh Posté le 26-07-2006 à 16:28:32    

Salut,
 
Bon j'ai cherché sur google et sur le forum mais j'ai pas trouvé de réponse.
 
Je souhaite lorsque l'utilisateur de la page rempli le formulaire, que lorsqu'il a rempli completement la zone, passer à la zone suivante.
 
Pour faire ça, j'ai modifié une fct js trouvé sur le net.
Je veux que cette fonction soit la plus globale possible, c'est à dire que je n'ai pas à spécifier la zone suivante où le focus doit aller.
 
La fonction fait bien son boulot sauf lorsqu'il y a une zone du formulaire pas visible.
Dans ce cas, le focus est fait dessus cette zone et ça ne fonctionne pas (logique).
 
Je pensais tester la visiblité de ma zone avant de faire le focus de manière à écarter ce cas de figure.
Le problème c'est que le style.display est au niveau du "td" et dc je n'arrive pas à récupérer l'état visible ou invisible de la zone lors du parcours des zones dans le js.
 

Code :
  1. <html>
  2.   <head>
  3. <script language="javascript">
  4. function sautTabInput(InputCourant,NomFormulaire)
  5. {
  6.   if (InputCourant.value.length > InputCourant.size - 1)
  7.   {
  8.     var f = document.getElementById(NomFormulaire);
  9.    
  10.     if(f)
  11.     {
  12.       var champs = f.getElementsByTagName("input" );
  13.    
  14.       for(var i=0, n=champs.length; i<n; i++)
  15.       {
  16.         if (champs[i].name == InputCourant.name)
  17.         {
  18.           for (var j=1;i+j<n;j++)
  19.           {
  20.             alert ('champs[i+j].name : '  + champs[i+j].name);
  21.             alert ('champs[i+j].style.display : ' + champs[i+j].style.display);
  22.             if (champs[i+j].style != 'display:none' && champs[i+j].type == 'text')
  23.             {
  24.               champs[i+j].focus();
  25.               break;
  26.             }
  27.           }
  28.           break;
  29.         }
  30.       }
  31.     }
  32.   }
  33. }
  34. </script>
  35.   </head>
  36.   <body>
  37.     <form method="post" action="bidon.aspx" name="F_SAISIE">
  38.       <table>
  39.         <tr id="toto">
  40.           <td>
  41.             toto<input type="text" name="txttoto" size="5" maxlength="5" value="" onkeyup="javascript:sautTabInput(this,'F_SAISIE');">
  42.           </td>
  43.         </tr>
  44.         <tr id="tutu">
  45.           <td>
  46.             tutu<input type="text" name="txttutu" size="5" maxlength="5" value="" onkeyup="javascript:sautTabInput(this,'F_SAISIE');">           
  47.           </td>
  48.         </tr>
  49.         <tr id="titi" style="display:none">
  50.           <td>
  51.             titi<input type="text" name="txttiti" size="5" maxlength="5" value="" >           
  52.           </td>
  53.         </tr>
  54.         <tr id="tata">
  55.           <td>
  56.             tata<input type="text" name="txttata" size="5" maxlength="5" value="" >           
  57.           </td>
  58.         </tr>
  59.       </table>
  60.     </form>
  61.   </body>
  62. </html>


 
il y aurait un moyen de detecter que la zone n'est pas visible et donc que le focus ne va pas fonctionner ?
 
d'avance merci


Message édité par trmassoud le 26-07-2006 à 17:15:54
Reply

Marsh Posté le 26-07-2006 à 16:28:32   

Reply

Marsh Posté le 26-07-2006 à 16:36:03    

sinon t'as l'attribut tabindex qu'est fait pour ça [:kiki]

Reply

Marsh Posté le 26-07-2006 à 16:46:13    

t'es sûr ?
 
je veux que sur une zone input de longueur 5 max quand on rentre 5 caractères ça passe à la zone input suivante ?

Reply

Marsh Posté le 26-07-2006 à 16:54:02    

ah non j'avais pas tout lu ... :D
Effectivement, si tu veux que "automatiquement" tu passes sur le prochain champs mal(ou pas) rempli tu es obligé de passer par du js.
 
Pour résoudre ton problème de "visibilité" je ne vois pas d'autre solution que de tester le visible du display du "prochain" champs, en oubliant pas de remonter à son père ( et au père de son pere, et ...) pour le vérifier ( donc ton exemple il faut remonter au grand père)

Reply

Marsh Posté le 26-07-2006 à 17:14:43    

anapajari a écrit :


Pour résoudre ton problème de "visibilité" je ne vois pas d'autre solution que de tester le visible du display du "prochain" champs, en oubliant pas de remonter à son père ( et au père de son pere, et ...) pour le vérifier ( donc ton exemple il faut remonter au grand père)


 
ben je vois pas comment remonter au père ou au grand père vu que je veux que la fonction soit la plus générique possible.
 
 
par contre j'ai trouvé une bidouille, c'est moche mais bon...
dans la fonction js je rajoute un try catch... :
 

Code :
  1. for (var j=1;i+j<n;j++)
  2.     {
  3.      if (champs[i+j].type == 'text')
  4.      {
  5.       try
  6.       {
  7.        champs[i+j].focus();
  8.        break;
  9.       }
  10.       catch (erreur)
  11.       {
  12.        continue;
  13.       }
  14.      }
  15.     }


 
 

Reply

Marsh Posté le 26-07-2006 à 17:19:41    

trmassoud a écrit :

ben je vois pas comment remonter au père ou au grand père vu que je veux que la fonction soit la plus générique possible.


parentNode

Reply

Marsh Posté le 26-07-2006 à 17:22:58    


 
merci je vais test

Reply

Sujets relatifs:

Leave a Replay

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