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 :

passage de paramètres par référence entre fonctions ?


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut passage de paramètres par référence entre fonctions ?
    Bonjour à tous,

    Je tente de développer une mise en forme de saisies utilisateurs côté client en javascript. (avant un traitement final en PHP côté serveur).

    Je ne parviens pas à comprendre comment passer mes paramètres par référence depuis la fonction major() vers les différentes fonctions de traitement ?

    Peut-être quelqu'un saura-t-il m'expliquer un peu ? D'avance merci.

    Ne faites pas attention à la présentation un peu "pompeuse" pour un débutant.

    Remarque : mes 2 fonctions pasEspace() et quePoint() fonctionnent très bien lorsqu'elles sont appellées seules. Mon problème est apparu avec la fonction major().

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    /* Bibliothèque    : rumba.js
     * Fonctionnalités : recueille des fonctions traitant les champs
     *                   d'un formulaire de saisie des horaires de
     *                   travail.
     */
     
     
    /***************************************************************/
    /* DÉCLARATIONS DES VARIABLES ET FONCTION PRINCIPALE ***********/
    /***************************************************************/
     
    function major() {
     
    var rumba_champ = new Array( );
    rumba_champ[0] = document.horaires.LunM.value;
    rumba_champ[1] = document.horaires.LunB.value;
    rumba_champ[2] = document.horaires.LunR.value;
    rumba_champ[3] = document.horaires.LunS.value;
    rumba_champ[4] = document.horaires.MarM.value;
    rumba_champ[5] = document.horaires.MarB.value;
    rumba_champ[6] = document.horaires.MarR.value;
    rumba_champ[7] = document.horaires.MarS.value;
    rumba_champ[8] = document.horaires.MerM.value;
    rumba_champ[9] = document.horaires.MerB.value;
    rumba_champ[10] = document.horaires.MerR.value;
    rumba_champ[11] = document.horaires.MerS.value;
    rumba_champ[12] = document.horaires.JeuM.value;
    rumba_champ[13] = document.horaires.JeuB.value;
    rumba_champ[14] = document.horaires.JeuR.value;
    rumba_champ[15] = document.horaires.JeuS.value;
    rumba_champ[16] = document.horaires.VenM.value;
    rumba_champ[17] = document.horaires.VenB.value;
    rumba_champ[18] = document.horaires.VenR.value;
    rumba_champ[19] = document.horaires.VenS.value;
    rumba_champ[20] = document.horaires.SamM.value;
    rumba_champ[21] = document.horaires.SamB.value;
    rumba_champ[22] = document.horaires.SamR.value;
    rumba_champ[23] = document.horaires.SamS.value;
    rumba_champ[24] = document.horaires.DimM.value;
    rumba_champ[25] = document.horaires.DimB.value;
    rumba_champ[26] = document.horaires.DimR.value;
    rumba_champ[27] = document.horaires.DimS.value;
    var i = 0;
     
    for(i=0;i< rumba_champ.length;i++) {
    	pasEspace(rumba_champ[i]);
    	quePoint(rumba_champ[i]);
    	     document.horaires.LunM.value = rumba_champ[i];
                 return false
    } // Fermeture de la boucle "for"
     
    	//return false;
    } // Fermeture de la fonction "major"
     
     
    /***************************************************************/
    /* MÉTHODES DE CLASSES *****************************************/
    /***************************************************************/
     
    /* Méthode         : noSpace
     * Classe          : String
     * Fonctionnalité  : retire tous les espaces présents dans la 
     *                   chaîne et retourne la chaîne épurée.
     */
     
    String.prototype.noSpace = function() {
    	return this.replace(/\s+/,"");
    }
     
    /* Méthode         : onlyPoint
     * Classe          : String
     * Fonctionnalité  : remplace tous les séparateurs (";","/",",")
     *                   par un point (".") et retourne la chaîne.
     */
     
    String.prototype.onlyPoint = function() {
    	return this.replace(/;|\/|,/,".");
    }
     
    /***************************************************************/
    /* FONCTIONS ***************************************************/
    /***************************************************************/
     
    /* Fonction        : pasEspace()
     * Fonctionnalité  : retire les espaces présents dans la chaîne
     *                   par appel de la méthode de classe String.
     */
     
    function pasEspace(String) {
    	for (j=0;j<5;j++)
    		{
    		String=String.noSpace();
    		return String;
    		}
    }
     
     
    /* Fonction        : quePoint()
     * Fonctionnalité  : remplace le séparateur si ce n'est pas un
     *                   point.
     */
     
    function quePoint(String) {
    	for (k=0;k<5;k++)
    		{
    		String=String.onlyPoint();
    		return String;
    		}
    }

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut,
    Tout d'abord, j'imagine que le return false dans la boucle de for de major() n'est là que pour tester sur une seule occurence ???
    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function pasEspace(String) {
    	for (j=0;j<5;j++)
    		{
    		String=String.noSpace();
    		return String;
    		}
    }
    Là encore... le return String me fait me poser quelques questions sur l'intérêt de tes boucles
    Ensuite, String comme nom de paramètre / variable, c'est à éviter à tout prix !

    Au cas où, je te rappelle qu'un return dans une fonction stoppe l'exécution de celle-ci.

    Enfin, pourrais-tu mieux expliquer ton problème : quel est le fonctionnement souhaité et quel est celui que tu obtiens ?
    Car je ne suis pas sûr d'avoir tout compris...

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour ce début de réponse.

    Oui le "return false" n'est là que pour les tests.
    Oui les variables "String" me semblaient étranges et contrevenir aux règles que je croyais connaître. Je les ai remplacées par "chaine".

    Il s'agit pour moi de tester le contenu de champs horaires (28 inputs) et je compte donc enchaîner plusieurs tests comme par exemple :
    1 - retirer tous les blancs
    2 - contrôler que le séparateur est bien un point (.)
    3 - vérifier que l'horaire ne dépasse pas 24
    4 - vérifier que les horaires d'une même journée sont bien dans l'ordre croissant
    5 - (et même gérer le cas où l'utilisateur saisit "14h45" pour qu'il devienne 14.75 mais ça c'est pas pour tout de suite…)

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Voici un exemple :
    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
    71
    72
    73
    74
    75
    76
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="Author" content="Daniel Hagnoul" />
        <title>Page type</title>
        <style type="text/css">
            body {
                background-color:#696969;
                color:#000000;
                font-family:Arial, Helvetica, sans-serif;
                font-size:medium;
                font-style:normal;
                font-weight:normal;
                line-height:normal;
                letter-spacing:normal;
            }
            div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
                margin:0px;
                padding:0px;
            }
            div#conteneur {
                width:95%;
                margin:12px auto;
                padding:6px;
                background-color:#FFFFFF;
                color:#000000;
                border:1px solid #999999;
                font-size:0.8em;
            }
        </style>
        <script type="text/javascript">
            String.prototype.noSpace = function() {
                return this.replace(/\s+/g,"");
            }
     
            String.prototype.onlyPoint = function() {
                return this.replace(/[,;/\\|]/g,".");
            }
     
            function major() {
                var rumba_champ = new Array();
                var s = "";
     
                rumba_champ[0] = document.horaires.LunM.value;
                rumba_champ[1] = document.horaires.LunB.value;
                rumba_champ[2] = document.horaires.LunR.value;
                rumba_champ[3] = document.horaires.LunS.value;
     
                for (var i = 0; i < rumba_champ.length; i++){
                    s = rumba_champ[i].noSpace();
                    rumba_champ[i] = s.onlyPoint();
                }
     
                document.horaires.LunM.value = rumba_champ[0];
                document.horaires.LunB.value = rumba_champ[1];
                document.horaires.LunR.value = rumba_champ[2];
                document.horaires.LunS.value = rumba_champ[3];
            }
        </script>
    </head>
    <body>
        <div id="conteneur">
            <form name="horaires" action="javascript:major();">
                <div>
                    <p>Lundi M : <input name="LunM" type="text" value=" 10 |20 " /></p>
                    <p>Lundi B : <input name="LunB" type="text" value="12/ 20 " /></p>
                    <p>Lundi R : <input name="LunR" type="text" value=" 15\20" /></p>
                    <p>Lundi S : <input name="LunS" type="text" value="18 , 20" /></p>
                    <p><input name="valider" type="submit" /></p>
                </div>
            </form>
         </div>
    </body>
    </html>

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Une autre erreur dans ton code que j'avais zappée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(i=0;i< rumba_champ.length;i++) {
    	pasEspace(rumba_champ[i]);
    	quePoint(rumba_champ[i]);
    	     document.horaires.LunM.value = rumba_champ[i];
                 return false
    }
    dans ce code, le renvoi de tes fonction est une copie de l'objet, il faut le réaffecter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(i=0;i< rumba_champ.length;i++) {
    	rumba_champ[i] = pasEspace(rumba_champ[i]);
    	rumba_champ[i] = quePoint(rumba_champ[i]);
    	     document.horaires.LunM.value = rumba_champ[i];
                 return false
    }
    autre chose concernant tes expressions régulières, tu ferais mieux d'ajouter un paramètre g pour que la recherche se fasse sur toute la chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return this.replace(/\s+/g,"");
    Enfin, ta fonction intermédiaire ne sert pas à grand chose... pourquoi ne pas faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(i=0;i< rumba_champ.length;i++) {
    	rumba_champ[i] = rumba_champ[i].noSpace();
    	rumba_champ[i] = rumba_champ[i].noPoint();
    	     document.horaires.LunM.value = rumba_champ[i];
                 return false
    }

  6. #6
    Candidat au Club
    Inscrit en
    Mai 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour vos réponses.

    J'ai pris conscience de mes lacunes et j'ai commencé à apprendre sérieusement le langage Je pense revenir vers vous d'ici quelques semaines.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/08/2007, 17h34
  2. Passage de paramètres par référence
    Par margagn dans le forum Framework .NET
    Réponses: 2
    Dernier message: 08/05/2007, 23h08
  3. [POO] Passage de paramètre par référence.
    Par abidi_niz dans le forum Langage
    Réponses: 3
    Dernier message: 12/10/2006, 12h20
  4. [C#] passage de paramètres par référence
    Par SesechXP dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2006, 12h48
  5. [EJB] Passage des paramètres par référence
    Par salome dans le forum Java EE
    Réponses: 2
    Dernier message: 05/07/2005, 11h25

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