Verif date JS - formulaire dynamique avec des [crochets]

Verif date JS - formulaire dynamique avec des [crochets] - HTML/CSS - Programmation

Marsh Posté le 22-04-2003 à 16:22:37    

Pour vérifier une date, j'ai besoin d'y accéder en JS à mon champ input qui s'appelle date_non_formatee[ ]et entre les crochet, il y a un numéro qui me sert après dans du php, comment récupérer la valeur du champ input en sachant que je n'ai qu'un seul formulaire sur la page.
 
J'ai essayé avec :
 
function checkdate(i)
{
  alert(document.forms[0].date_non_formatee[i]);
}
 
onchange=checkdate(i);
 
Mais cela donne une erreur il y a t il moyen d'avoir la liste du contenu du DOM pour retrouver la valeur du champ auquel je veux accédé ?
 
Lionel

Reply

Marsh Posté le 22-04-2003 à 16:22:37   

Reply

Marsh Posté le 22-04-2003 à 17:43:00    

Dans ton formulaire, il ne faut pas confondre ID et NAME !
 
<INPUT NAME="date_non_formatee[1]" ID="date01" TYPE="text">
<INPUT NAME="date_non_formatee[2]" ID="date02" TYPE="text">
<INPUT NAME="date_non_formatee[3]" ID="date03" TYPE="text">
 
 
Dans le onChange, tu met l'ID et pas le NAME.
 
On encore : tu met onChange="javascript:return checkDate(this);"
 
et alors checkdate() devient un truc du genre :
 

Code :
  1. // Vérifie qu'une date est bien saisie dans le format JJ/MM/AAAA
  2. /*--------------------------------------------------------*/
  3. function checkDate( oDateToCheck )
  4. {
  5. var dDate; // Utilisé pour générer un objet Date
  6. var nDate; // Utilisé pour générer une référence temporelle numérique !
  7. var aDate; // Tableau des éléments du champs de saisie séparés par de "/"
  8. // Messages d'erreur.  
  9. var sErrFormat = "La date doit être saisie dans le format JJ/MM/AAAA !";
  10. var sErrFormatJour = "Le jour doit être compris entre 1 et 31 !";
  11. var sErrFormatMois = "Le mois doit être compris entre 1 et 12!";
  12. var sErrFormatAnnee = "L'année doit être sur 1,2 ou 4 chiffres !";
  13. // Suppression des espaces du début
  14. oDateToCheck.value = oDateToCheck.value.replace( /^\s+/, "" );
  15. // Suppression des espaces de fin
  16. oDateToCheck.value = oDateToCheck.value.replace( /\s+$/, "" );
  17. // Remplacement des espaces par des /
  18. oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
  19. oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
  20. oDateToCheck.value = oDateToCheck.value.replace( /\s+/, "/" );
  21. oDateToCheck.ok = false;
  22. //cas d'une date vide
  23. if( oDateToCheck.value == "" )
  24. {
  25.  oDateToCheck.ok = true;
  26.  return true;
  27. }
  28. // Séparation des éléments de la date.
  29. aDate = oDateToCheck.value.split( "/" );
  30. // On vérifie qu'on a bien 3 éléments  
  31. if( aDate.length != 3 )
  32. {
  33.  // S'il n'y as pas de /, on découpe la chaine en 3 si sa longueur est 6 ou 8
  34.  if( aDate.length == 1 )
  35.  {
  36.   if( oDateToCheck.value.length == 6 )
  37.   {
  38.    aDate[0] = oDateToCheck.value.substr( 0, 2);
  39.    aDate[1] = oDateToCheck.value.substr( 2, 2);
  40.    aDate[2] = oDateToCheck.value.substr( 4, 2);
  41.   }
  42.   else if( oDateToCheck.value.length == 8 )
  43.   {
  44.    aDate[0] = oDateToCheck.value.substr( 0, 2);
  45.    aDate[1] = oDateToCheck.value.substr( 2, 2);
  46.    aDate[2] = oDateToCheck.value.substr( 4, 4);
  47.   }
  48.   else
  49.   {
  50.    alert( sErrFormat );
  51.    return false;
  52.   }
  53.  }
  54.  else
  55.  {
  56.   alert( sErrFormat );
  57.   return false;
  58.  }
  59. }
  60. // On vérifie que c'est bien des nombres
  61. if( isNaN( aDate[0] ) ||  isNaN( aDate[1] ) || isNaN( aDate[2] )  )
  62. {
  63.  alert( sErrFormat );
  64.  return false;
  65. }
  66. // Vérification grossière sur le jour
  67. if( aDate[0] > 31 || aDate[0] < 1 )
  68. {
  69.  alert( sErrFormatJour );
  70.  return false;
  71. }
  72. // Vérification du mois
  73. if( aDate[1] > 12 || aDate[1] < 1 )
  74. {
  75.  alert( sErrFormatMois );
  76.  return false;
  77. }
  78. // Vérifier que l'année est bien sur 1, 2 ou 4 chiffres
  79. if( aDate[2].length != 1 && aDate[2].length != 2 && aDate[2].length != 4  )
  80. {
  81.  alert( sErrFormatAnnee );
  82.  return false;
  83. }
  84. // Si l'année est sur 1 ou 2 chiffres, on la remet sur 4
  85. if( aDate[2] < 50 )
  86. {
  87.  aDate[2] = 2000 + parseInt( aDate[2] );
  88. }
  89. else
  90. {
  91.  if( aDate[2] >= 50 && aDate[2] < 100 )
  92.  {
  93.   aDate[2] = 1900 + parseInt( aDate[2] );
  94.  }
  95. }
  96. // Création d'une référence temporelle numérique à partir des élémentnt de la date  
  97. nDate = Date.parse( aDate[1] + "/" + aDate[0] + "/" + aDate[2]  );
  98. // Vérification que la référence temporelle est une date valide
  99. if( isNaN( nDate ) )
  100. {
  101.  alert( oDateToCheck.value + " n'est pas une date valide !" );
  102.  return false;
  103. }
  104. else
  105. {
  106.  // On renvoie la date formatée
  107.  dDate = new Date( nDate )
  108.  oDateToCheck.value = dDate.getDate() + "/" + ( dDate.getMonth() + 1 ) + "/" + dDate.getFullYear();
  109.  oDateToCheck.ok = true;
  110.  return true;
  111. }
  112. }


 
L'avantage avec cette fonction, c'est que si tu saisi '22 4 3' dans ton champs, il le formate automatiquement en 22/4/2003 !
 
@+


Message édité par Mara's dad le 22-04-2003 à 17:45:59

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 23-04-2003 à 15:48:53    


Génération du formulaire :
---------------------------
 
echo(" Date : (dd/mm/yyyy) <input size=15 name=date_non_formatee[".$i."] id=date[".$i."] onChange=checkdate($i);></input> <br>" );
 
Appel JS :
----------
 
function checkdate(i){
 var dt1=document.forms[0].date[i];
 if (isDate(dt1.value)==false){
  dt1.focus()
  return false
 }
    return true
}
 
Mais ca marche pas j'ai encore des erreurs sur ma page.
 

Reply

Marsh Posté le 23-04-2003 à 15:55:49    

echo(" Date : (dd/mm/yyyy) <input size=15 name=date_non_formatee[$i] id=date_$i onChange=checkdate($i);></input> <br>" );  
 
Appel JS :  
----------  
 
function checkdate(i){  
var dt1=Document.getElementById("date_"+i);  
if (isDate(dt1.value)==false){  
 dt1.focus()  
 return false  
}  
   return true  
}  


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 23-04-2003 à 15:59:07    

Ou encore :
 
echo(" Date : (dd/mm/yyyy) <input size=15 name=date_non_formatee[$i] onChange=checkdate(this);></input> <br>" );  
 
Appel JS :  
----------  
 
function checkdate(i){  
if (isDate(i.value)==false){  
i.focus()  
return false  
}  
  return true  
}  


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 24-04-2003 à 09:55:13    

La preimière solution ne fonctionnait pas (erreur sur la page)
 
Mais la deuxième a fonctionné parfaitement, merci
 
Lionel

Reply

Sujets relatifs:

Leave a Replay

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