[ASP/VBSCRIPT/JAVASCRIPT] Pb de vérification de la validé d'1 champ

Pb de vérification de la validé d'1 champ [ASP/VBSCRIPT/JAVASCRIPT] - Programmation

Marsh Posté le 02-04-2002 à 13:42:03    

Voilà je vous montre mon code source en parallèle a mon explication... :
En la page4.asp de mon projet permet de saisir un nombre entre 1 et 99.(champ text)
j'enregistre le nombre. (dans Session("nb_annee" ) cf code)
A la page5.asp je crée un tableau du nombre de ligne correspondant a ce nombre :
 
<%
  Dim compteur, i%>
  <form method="post" action="Page5enr.asp" name="form" onSubmit="return VerifForm(form)">
    <input type="hidden" name="VarSession" value="VRAI">
   <%i = 0
   CurrentYear = 2003
   LastYear = 2002
   DecrementYear = 0
   compteur = 1
   %>
   
   <%for compteur = 1 to Session("nb_annee" )%>
   
   <TR>
  <TH><!--ce TH correspond a la colonne anne scolaire -->
   <select name="annee<%=i%>">
   <% do while LastYear >= 1950
    Response.write "<option>" & CurrentYear & "-" & LastYear & "</option>"
    CurrentYear = CurrentYear - 1
             LastYear = LastYear - 1
            loop
            DecrementYear = DecrementYear + 1
            CurrentYear = 2003 - DecrementYear
     LastYear = 2002 - DecrementYear
            %>  
          </select>
  </th>
  <th>
   <INPUT TYPE="text" NAME="etablissement<%=i%>" size="30">
  </th>
  <th>
   <INPUT TYPE="text" NAME="classe<%=i%>">
  </th>
  <th>
   <INPUT TYPE="text" NAME="diplome_suivi<%=i%>">
  </th>
  <th>
   
   <INPUT TYPE="text" NAME="diplome_obtenu<%=i%>">
  </th>
 </TR>
   <%
   i = i + 1
   next
   %>
   </table>
 <INPUT TYPE="hidden" NAME="indice" value="<%=i-1%>">
 <br>
 <br>
    <center>
 <input type="button" name="retour" value="Etape précédente (2)" onClick="parent.history.back()"> 
 
      <input type="button" name="annuler" value="Annuler la demande" onClick="window.location='Page1.asp'"> 
       
      <input type="submit" name="suivant" value="Etape suivante (4)">
    </center>
   </form>  
  </p>
</div>
</body>
</html>
 
 
Le nombre de ligne de tableau m'est donné par le button caché de name "indice" :
 
<INPUT TYPE="hidden" NAME="indice" value="<%=i-1%">
 
En fait vous voyez que ds le code j'ai une colonne annee scolaire ds laquelle pour chaque ligne j'ai un select, chaque valueur de ce select sont en fait des paires d'année:
ex: le n° 0 du select est 2003-2002
le n°1 du select est 2002-2001
jusqu'à 1951-1950
et ce pour chaque ligne de la colonne annee scolaire.
Comme la personne doit saisir ds une autre colonne son établissement fréquenté ds la meme ligne que l'annee scolaire,
a la deuxième ligne l'année choisie doit etre strictement inférieure a celle de la première ligne
ex: ligne1: 2003-2002
 ligne2 : 2002-2001
ligne3: 1970-1971
ligne4:1980-1981 ---> je doit dire erreur !! car les années scolaire doivent etres decroissante !!ici anne ligne4 >= ligne3
dc je test tout ca par un script Javascript :D
voila mon code:
 
<SCRIPT LANGUAGE="JavaScript">
function VerifForm(form){
i = 0;
indice = document.form.indice.value;
//tab = new Array (indice);
for (i=0;i<indice;i++){
 //if (document.form.annee+i.selectedIndex > document.form.annee+(i+1).selectedIndex){
  alert(document.form.annee+i.selectedIndex);
 //}
}
return false;
}
</SCRIPT>
 
lorsque je submit le formulaire, je vérifie si les annees scolaires sont bien strictement décroissante via ce bout de code javascript
le bleme c que le name du select (pour les anne scolaires) evolue a chaque fois ds ma boucle
1ere ligne: name du select est = a annee0
2eme : annee1
...
dc ds mon script javascript je n'arrive pas a vérifier le select de chaque ligne de la colonne anne scolaire!
 
alert(document.form.annee+i.selectedIndex);
// ca m'affiche une boite de dialog avec inscrit NaN (not a number)
 
alert(document.form.annee0.selectedIndex);
// ca m'affiche bien le n° d'option selectionner ds le select de la première ligne !
 
En kler comment faire pour tester TOUTES les lignes dont j'en ignore le nombre a l'avance (boucle obligatoire !)
 
si j'enleve les // ds mon script, ca ne rentre pas ds le if car le if est faux! (NaN)
 
J'espère ne pas avoir été trop long :D ...si c pas kler dite moi!

Reply

Marsh Posté le 02-04-2002 à 13:42:03   

Reply

Marsh Posté le 02-04-2002 à 14:10:14    

c'est normal que ca ne marche pas, tu ne peux pas creer a la volée le nom de l'element que tu veux tester.  
 
Par contre, tu as une alternative.  
tu fais ceci :
 
var k=0
while (document.nom_form.elements[k])
    {
        if (document.nom_form.elements[k].type.lastIndexOf(indice)!=-1)
              {
                    tu recuperes la valeur de ton element
              }
 
        if (document.nom_form.elements[k].type.lastIndexOf(indice+1)!=-1)
              {
                    tu recuperes ton deuxieme element
              }
   k++;
}
 
    }
elements(k) te permet de balayer la collection d'objet disponible dans une form donnée. Tu peux alors tester le type, le nom, la valeur.... il te reste a tester les deux objets que tu retrouveras plus facilement.
 
j'espere aussi que j'ai ete clair (;)).
bon courage !

Reply

Marsh Posté le 02-04-2002 à 14:20:16    

Bon je n'ai pas tout calé...fo dire que j'apprend le javascript sur le tas en ce moment....je me pose kk ptite question:
 
while (document.nom_form.elements[k]) //le nombre d'élément de mon form sont nombreux (5 lignes avec le champ select et 4 champs texte.si j'ai 20 ligne a tester c lourd non ?
 
 
if (document.nom_form.elements[k].type.lastIndexOf(indice)!=-1) //type c un objet ou si je dois mettre select a la place ?,
lastIndexOf(indice) ca ne renvoie pas le dernier caractere d'une chaine? ici indice est un nombre  
 
bon je vais vite testez tout ca chez moi en tout cas !
THX very much !

Reply

Marsh Posté le 02-04-2002 à 14:37:57    

Pour ta premiere question :
le javascipt va assez vite pour faire ses tests....mais bon, faut voir ce que ca donne avec des tests. D'apres ce que j'ai compris de ton code, tu etablis un cursus scolaire. Je sais pas si tu auras bcp de personnes qui ont fait 20 ans d'etudes ;). A tester
 
 
pour la deuxieme, j'ai fait une legere erreur. Type est une proprieté de ton element, tout comme name et value. Par exemple, pour un champ texte, son type sera text, son nom sera la valeur que tu as affecté à name, et value sera sa valeur.
 
Donc document.nom_form.elements[k].type donnera le type de l'objet (text, select, hidden...). C'est la que j'ai fait une erreur, c'est sur name que tu dois faire le test. Donc ce sera  
 
document.nom_form.elements[k].name.lastIndexOf("annee"+i)!=-1
 
qu'il faudra tester. lastIndexOf permet de savoir si la chaine contenue dans les parentheses est inclue dans dans le nom de l'objet. si il existe, la valeur resultante sera differente de -1.
 
donc ce que j'ai ecrit ci dessus permet de savoir si l'objet s'appele annee suivi de l'indice. Ensuite, tu recuperes l'index comme tu a fait precedemment et tu le stockes dans une variable temporaire.  
Apres, tu cherches "annee"+i+1, tu recuperes son index, et tu testes egalement. A la fin, tu compares. Il faudra peut etre que tu fasses attention à "annee"+i+1, afin qu'il ne cherche pas annee51 au lieu de annee6 par exemple. A ce moment la, tu effectues le calcul juste avant le test

Reply

Marsh Posté le 02-04-2002 à 15:04:23    

OK merci j'ai très bien compris....Mais
 
une fois que je récupère l'index et dc que je suis sur l'objet désiré, je finirais bien par vouloir récupérer la valeur ds mon select choisi! dc je dois faire
ds le if:
if (document.form.annee+(variable ds l'aquelle j'ai recup l'index).selectedIndex > (document.form.annee+(variable ds l'aquelle j'ai recup l'index précedent).selectedIndex  
 
conclussion ca revient au meme ??

Reply

Marsh Posté le 02-04-2002 à 15:13:35    

non, ca ne revient pas au meme :
 
var k=0  
while (document.nom_form.elements[k])  
   {  
    var val = "annee"+i    
    if (document.nom_form.elements[k].name.lastIndexOf(val)!=-1)  
             {  
                   index1 = document.nom_form.elements[k].selectedIndex  
             }  
     tmp = i+1
     val = "annee"+val
       if (document.nom_form.elements[k].type.lastIndexOf(val)!=-1)  
             {  
                   index2 = document.nom_form.elements[k].selectedIndex
             }  
  k++;  
}  
 
if (index2>index1)
  {
     alert("erreur" );
  }
 
 
l'avantage ici est que tu testes le nom a travers un test de valeur de variable (ou qu'elle est violente cette phrase :D).
Dans l'autre cas, tu essayais te construire le nom de ta variable a la volée, ce qui est different.
 
si tu ne vois pas le truc, n'hesites pas a me poser des questions !!

Reply

Marsh Posté le 02-04-2002 à 15:31:05    

c bon tout est limpide ! :D
...Mais :lol:
 
non en fait...si j'ai bien compris j'ai autant a foutre l'indice ds un tableau conncatener avec le nom de la variable
ex:
 
function VerifForm(form){  
i = 0;  
indice = document.form.indice.value;  
tab = new Array (indice);  
for (i=0;i<indice;i++){
tab[i] = "annee"+i;
tab[i+1] =  "annee"+(i+1);

if (document.form.tab[i].selectedIndex > document.form.tab[i+1].selectedIndex){  
 alert('erreur';);  
}  
}  
return false;  
}  
 
d'après t conseil cela devrait directement marcher car ca revient au meme que:
 
document.nom_form.elements[k].selectedIndex que tu mets ds index2 puis document.nom_form.elements[k].selectedIndex que tu mets ds index1 .... et tu test indirectement
 
non ?

 

[jfdsdjhfuetppo]--Message édité par Giz_--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 02-04-2002 à 15:43:17    

et non !  
si tu mets tab[i], il va chercher l'objet qui s'appelle tab[i].  
il ne remplacera pas tab[i] par sa valeur...
on en revient au meme probleme...
 
je sais , c super lourd, mais qd on a pas le choix :(
si qq'un d'autre a une solution, je suis preneur !!!
en tout cas, c la seule que j'ai et que j'utilise regulierement ...

Reply

Marsh Posté le 02-04-2002 à 15:47:23    

Ok alors avec element[k] il remplace par la vrai valeur...parce que c un objet j'imagine (dc il interprete)
 
...zarb...zarb ce javascript qd meme
 
Bon Merci beaucoup pour l'aide ! [:giz]

 

[jfdsdjhfuetppo]--Message édité par Giz_--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 02-04-2002 à 15:57:15    

oui, car element[k]est une collection d'objet...
 
vas comprendre ...  
 
bon courage :D

Reply

Sujets relatifs:

Leave a Replay

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