IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

La fonction de vérification de date (FAQ) génère une erreur dans la console.


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut La fonction de vérification de date (FAQ) génère une erreur dans la console.
    Bonjour,

    Je viens de réaliser un formulaire de recherche pour lequel j'ai besoin de contrôler un champ texte contenant une date. J'ai utilisé ce script issu de la FAQ Javascript.

    Tout fonctionne sous IE6 et Firefox 2.0 (imposés). Mais j'obtiens un message dans la console d'erreur de Firefox :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    /**
     * Fonction CheckDate()
     * 
     * Vérifie la syntaxe d'une date
     * http://javascript.developpez.com/faq/?page=formObjs#VerifDate
     * auteur : simone.51
     * 
     */
    function CheckDate(d) {
          // Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date.
          // Le séparateur est défini dans la variable separateur
          var amin=1999; // année mini
          var amax=2005; // année maxi
          var separateur="/"; // separateur entre jour/mois/annee
          var j=(d.substring(0,2)); // ## LA LIGNE 108 QUI GENERE L'ERREUR
          var m=(d.substring(3,5));
          var a=(d.substring(6));
          var ok=1;
     
          if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
             alert("Le jour n'est pas correct."); ok=0;
          }
     
          if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
             alert("Le mois n'est pas correct."); ok=0;
          }
     
          if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) {
             alert("L'année n'est pas correcte."); ok=0;
          }
     
          if ( ((d.substring(2,3)!=separateur)||(d.substring(5,6)!=separateur))
      && (ok==1) ) {
             alert("Les séparateurs doivent être des "+separateur); ok=0;
          }
     
          if (ok==1) {
             var d2=new Date(a,m-1,j);
             j2=d2.getDate();
             m2=d2.getMonth()+1;
             a2=d2.getFullYear();
             if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
                alert("La date "+d+" n'existe pas !");
                ok=0;
             }
          }
          return ok;
    }
    La fonction est appelée depuis l'évènement onblur du champs texte associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" onblur="CheckDate(this.value);" id="dateEvenement" maxlength="10" />
    J'ai essayé de forcer d en string en ajoutant d.toString(); mais ça n'a pas fonctionné.

    Quelqu'un voit d'où ça peut venir ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    essaye avec substr ???
    a mon avis c'est la console qui délire ... ou ta version de js qui est boiteuse ?.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour SpaceFrog et merci pour ta réponse.

    Il se trouve que j'ai eu la même idée que toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Erreur : d.substr is not a function
    Fichier source : ###/index.html
    Ligne : 108
    Bizarre.

    J'ai effectué un test bidon avec la fonction substring :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var str="Andromaque se parfume à la lavande";
    var str2 = (str.substring(0,10));
    alert(str2); // retourne bien "Andromaque"
    Cette fois ci, je n'ai rien dans la console


    Je vais plus loin et cette fois je passe la chaîne à traiter en paramètre (faut bien essayer quelque chose ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //Chaîne passée en paramètre : 'Le chacal n'aime pas le vermicelle'
    function test(t) {
      var str2 = (t.substring(3,6));
      alert(str2); // retourne bien "chacal"
    }

    Désespéré, j'essaie ensuite avec des valeurs numériques, des valeurs avec des barres obliques '/' : toujours rien dans la console.

    Pendant mes tests, j'ai bien pris soin de mettre mon code et ma fonction de test dans le même environnement. Je veux dire par là au même endroit que ma fonction checkDate, pour les faire cohabiter avec d'autres fonctions et ainsi, vérifier d'éventuelles d'interférences avec d'autres scripts.

    La syntaxe balises script est correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">//<![CDATA[
    ...
    //]]></script>
    La version de Javascript de Mozilla Firefox 2.0 est la version 1.7

    Edit :
    Je viens de tester sous Firefox v3.6 (Javascript v1.8) : ça passe. C'est donc surement un problème au niveau de la version Javascript (bien vu).

    Je pense qu'on ne peux pas y faire grand chose. Je n'ai pas de choix les postes sont tous sous FF 2.0.20. Vu que ça n'entrave pas le fonctionnement du script, je passe mon post en

    Merci tout de même
    Dernière modification par Invité ; 30/07/2010 à 10h52.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    ffx2.0 ???
    heu on en est à 3.6 là...

    Perso je viens de tester avec 3.6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Nouvelle page 1</title>
    <script type="text/javascript">
    /**
     * Fonction CheckDate()
     * 
     * Vérifie la syntaxe d'une date
     * http://javascript.developpez.com/faq/?page=formObjs#VerifDate
     * auteur : simone.51
     * 
     */
    function CheckDate(d) {
          // Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date.
          // Le séparateur est défini dans la variable separateur
          var amin=1999; // année mini
          var amax=2010; // année maxi
          var separateur="/"; // separateur entre jour/mois/annee
          var j=(d.substring(0,2)); // ## LA LIGNE 108 QUI GENERE L'ERREUR
          var m=(d.substring(3,5));
          var a=(d.substring(6));
          var ok=1;
     
          if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
             alert("Le jour n'est pas correct."); ok=0;
          }
     
          if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
             alert("Le mois n'est pas correct."); ok=0;
          }
     
          if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) {
             alert("L'année n'est pas correcte."); ok=0;
          }
     
          if ( ((d.substring(2,3)!=separateur)||(d.substring(5,6)!=separateur))
      && (ok==1) ) {
             alert("Les séparateurs doivent être des "+separateur); ok=0;
          }
     
          if (ok==1) {
             var d2=new Date(a,m-1,j);
             j2=d2.getDate();
             m2=d2.getMonth()+1;
             a2=d2.getFullYear();
             if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
                alert("La date "+d+" n'existe pas !");
                ok=0;
             }
          }
          return ok;
    }
    alert(CheckDate('12/05/2010'))
     
    </script>
    </head>
     
    <body>
     
    </body>
     
    </html>
    Aucun message ni avertissement dans la console ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Il suffit alors de modifier l'approche du découpage de la date, soit avec un split soit avec une regexp
    voici une version avec split:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Nouvelle page 1</title>
    <script type="text/javascript">
    /**
     * Fonction CheckDate()
     * 
     * Vérifie la syntaxe d'une date
     * http://javascript.developpez.com/faq/?page=formObjs#VerifDate
     * auteur : simone.51
     * 
     */
    function CheckDate(d) {
          // Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date.
          // Le séparateur est défini dans la variable separateur
          var amin=1999; // année mini
          var amax=2010; // année maxi
          var separateur="/"; // separateur entre jour/mois/annee
          var tabdate=d.split(separateur)
          if(tabdate.length!=3){
    		     alert('format de date erronné');
    		     ok=0;
    		     }
     
    	  else{     
          	var j=tabdate[0]
          	var m=tabdate[1]
          	var a=tabdate[2];
           ok=1;
     
          if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
             alert("Le jour n'est pas correct."); ok=0;
          	}
     
          if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
             alert("Le mois n'est pas correct."); ok=0;
          	}
     
          if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) {
             alert("L'année n'est pas correcte."); ok=0;
          	}
     
     	}
     
          if (ok==1) {
             var d2=new Date(a,m-1,j);
             j2=d2.getDate();
             m2=d2.getMonth()+1;
             a2=d2.getFullYear();
             if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
                alert("La date "+d+" n'existe pas !");
                ok=0;
             }
          }
          return ok;
    }
    alert(CheckDate("12/05/2010"))
     
    </script>
    </head>
     
    <body>
     
    </body>
     
    </html>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Impeccable !!

    Merci pour tes réponses et pour ton temps

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    la version en regexp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Nouvelle page 1</title>
    <script type="text/javascript">
    /**
     * Fonction CheckDate()
     * 
     * Vérifie la syntaxe d'une date
     * http://javascript.developpez.com/faq/?page=formObjs#VerifDate
     * auteur : simone.51
     * modifié par Spacefrog
     * 
     */
    function CheckDate(d) {
          // Cette fonction vérifie le format JJ/MM/AAAA saisi et la validité de la date.
          // Le séparateur est défini dans la variable separateur
          var amin=1999; // année mini
          var amax=2010; // année maxi
          var sep="/"
          var reg=new RegExp("(\\d{1,2})["+sep+"](\\d{1,2})["+sep+"/](\\d{4})")
          var tabdate=reg.exec(d)
     
          if(tabdate.length!=4){
    		     alert('format de date erronné');
    		     ok=0;
    		     }
     
    	  else{     
          	var j=tabdate[1]
          	var m=tabdate[2]
          	var a=tabdate[3];
           ok=1;
     
          if ( ((isNaN(j))||(j<1)||(j>31)) && (ok==1) ) {
             alert("Le jour n'est pas correct."); ok=0;
          	}
     
          if ( ((isNaN(m))||(m<1)||(m>12)) && (ok==1) ) {
             alert("Le mois n'est pas correct."); ok=0;
          	}
     
          if ( ((isNaN(a))||(a<amin)||(a>amax)) && (ok==1) ) {
             alert("L'année n'est pas correcte."); ok=0;
          	}
     
     	}
     
          if (ok==1) {
             var d2=new Date(a,m-1,j);
             j2=d2.getDate();
             m2=d2.getMonth()+1;
             a2=d2.getFullYear();
             if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
                alert("La date "+d+" n'existe pas !");
                ok=0;
             }
          }
          return ok;
    }
    alert(CheckDate("12/05/2010"))
     
    </script>
    </head>
     
    <body>
     
    </body>
     
    </html>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/10/2012, 13h57
  2. [Dates] Fonction de vérification de date
    Par yakup.67 dans le forum Langage
    Réponses: 2
    Dernier message: 02/07/2007, 12h56
  3. [Dates] Date : Une erreur dans la documentation de PHP ?
    Par vincentweb dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2006, 23h55
  4. [VB6] Problème de textbox multiligne qui génére une erreur
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/02/2006, 16h21
  5. Réponses: 2
    Dernier message: 01/11/2005, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo