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 :

Encapsuler des fonctions


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    BTS SIO
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : BTS SIO

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut Encapsuler des fonctions
    Bonjour,

    Je débute plus au moins dans le dev WEB et c'est pour cela que j'aurai besoin de vous pour me résoudre un problème.

    Je souhaite faire une grosse fonction qui permet de vérifier un formulaire. Pour cela, je souhaite encapsuler plusieurs fonctions dans une grosse, mais en vain ..
    Pourtant quand j'appelle mes fonctions une à une, cela fonctionne..

    Code JS :
    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
    function checkCategories(){
      function checkSlug(slug){
        var patt=new RegExpSlug(/^[a-z\-0-9]+$/);
     
        if (document.formAjouter_Categorie.slug.value.length == 0){
          alertify.alert("Le champ nom doit être renseigné");
          return false;
        }
        if(document.formAjouter_Categorie.slug.value == (/^[a-z\-0-9]+$/)){
          alertify.alert("Le slug est incorrect");
          return false;
        }
      }
     
      function checkName(name){
        var mini = 2
        var maxi = 25
     
        if (document.formAjouter_Categorie.name.value.length == 0){
          alertify.alert("Le champ nom doit être renseigné");
          return false;
        }
        if (mini != 0) {
          if (document.formAjouter_Categorie.name.value.length < mini ) {
            alertify.alert("Le nom de la catégorie doit comporter au moins " + mini + " caractères.");
            return false;
          }
        }
        if (maxi != 0) {
          if (document.formAjouter_Categorie.name.value.length > maxi ) {
            alertify.alert("Le nom de la catégorie ne doit pas comporter plus de " + maxi + " caractères.");
            return false;
          }
        }
      }
    }
    Code HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="formAjouter_Categorie" action="#" method="post"  onsubmit="return checkCategories()">

    Pourriez vous m’éclaircir ? Je vous en remercie d'avance.

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    des fonctions DANS des fonctions ...

    assez effrayant je dois le dire ...

    a la limite un objet ???
    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
     
    var checkCategories = {
        checkSlug: function (slug) {
            var patt = new RegExpSlug(/^[a-z\-0-9]+$/);
     
            if (document.formAjouter_Categorie.slug.value.length == 0) {
                alertify.alert("Le champ nom doit être renseigné");
                return false;
            }
        },
        checkName: function (name) {
            var mini = 2
            var maxi = 25
     
            if (document.formAjouter_Categorie.name.value.length == 0) {
                alertify.alert("Le champ nom doit être ...");
            }
        }
    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
    Futur Membre du Club
    Homme Profil pro
    BTS SIO
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : BTS SIO

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut
    Désole de t'avoir effrayé

    Donc j'ai prit en compte ta correction, j'obtiens donc ce code :

    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
     
    var checkCategories = {
      checkSlug : function (slug){
     
        if (document.formAjouter_Categorie.slug.value.length == 0){
          alertify.alert("Le champ nom doit être renseigné");
          return false;
        }
        if(document.formAjouter_Categorie.slug.value == (/^[a-z\-0-9]+$/)){
          alertify.alert("Le slug est incorrect");
          return false;
        }
      },
     
      checkName : function (name){
        var mini = 2
        var maxi = 25
     
        if (document.formAjouter_Categorie.name.value.length == 0){
          alertify.alert("Le champ nom doit être renseigné");
          return false;
        }
        if (mini != 0) {
          if (document.formAjouter_Categorie.name.value.length < mini ) {
            alertify.alert("Le nom de la catégorie doit comporter au moins " + mini + " caractères.");
            return false;
          }
        }
        if (maxi != 0) {
          if (document.formAjouter_Categorie.name.value.length > maxi ) {
            alertify.alert("Le nom de la catégorie ne doit pas comporter plus de " + maxi + " caractères.");
            return false;
          }
        }
      }
    }
    Il me semble qu'il est juste, ou alors arrête moi si je me trompe.
    Cependant que dois-je mettre dans mon onsubmit de mon formulaire étant donné que c'est un objet ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Pourquoi effrayant SpaceFrog ? Une fonction est une variable locale tout à fait valable. On trouve ce pattern dans plein de bibliothèques. C'est même un pattern courant pour la déclaration de méthodes d'instance en POO JavaScript.

    Strycek, dans ton premier code tu déclares deux fonctions au moment de l'appel de la fonction checkCategories. Mais ces fonctions, tu n'en fais rien avec. Peut-être que sous cette forme, le problème t'apparaîtra plus clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function checkCategories(){ 
       var checkSlug = function(slug){ ... };
       var checkName = function(name){ ... };
      //ici, il manque concrètement ce que doit faire la fonction checkCategories
    }

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Je crois que StryceK s'attendait à ce que les fonctions « internes » soient exécutées dans la foulée. Du coup je pense que le post de Sylvain est très clair là-dessus.

    Allez, j'en rajoute une couche quand même : les fonctions locales ne sont rien de plus que des variables locales. Il faut les appeler à la main sinon ça ne se fera pas tout seul
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    BTS SIO
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : BTS SIO

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut
    Etrange, j'ai pourtant recopié exactement ta syntaxe Sylvain.
    J'obtiens donc ceci :
    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
    function checkCategories(){
      var checkSlug = function(slug){
        if (document.formAjouter_Categorie.slug.value.length == 0){
          alertify.alert("Le champ nom doit être renseigné");
          return false;
        }
        if(document.formAjouter_Categorie.slug.value == (/^[a-z\-0-9]+$/)){
          alertify.alert("Le slug est incorrect");
          return false;
        }
      };
     
      var checkName = function (name){
        var mini = 2
        var maxi = 25
     
        if (document.formAjouter_Categorie.name.value.length == 0){
          alertify.alert("Le champ nom doit être renseigné");
          return false;
        }
        if (mini != 0) {
        if (document.formAjouter_Categorie.name.value.length < mini ) {
          alertify.alert("Le nom de la catégorie doit comporter au moins " + mini + " caractères.");
          return false;
          }
        }
        if (maxi != 0) {
          if (document.formAjouter_Categorie.name.value.length > maxi ) {
            alertify.alert("Le nom de la catégorie ne doit pas comporter plus de " + maxi + " caractères.");
            return false;
          }
        }
      }; 
    }
    Ainsi que mon bout de HTML :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="formAjouter_Categorie" action="#" method="post"  onsubmit="return checkCategories()">

Discussions similaires

  1. Encapsulation des fonctions en javascript
    Par nicko_73 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/10/2009, 09h29
  2. Liste des fonctions
    Par Mookie dans le forum C
    Réponses: 2
    Dernier message: 22/09/2003, 16h42
  3. Des fonctions OGL pour les images de format usuel ?
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 31/05/2003, 21h59
  4. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

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