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 :

nom des formulaires et champs en paramètre?


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut nom des formulaires et champs en paramètre?
    Bonjour,

    Débutant en javascript, j'ai un problème avec une fonction dont le but est de compléter les champs d'un formulaire par des zéros si la longueur est insuffisante : par exemple, pour un numéro de compte bancaire, si l'utilisateur tape 7 chiffres, elle rajoutera 4 zéros devant pour atteindre les 11 chiffres que comporte tous les comptes.

    Devant appliquer cette fonction à plusieurs champs et plusieurs formulaires, j'ai voulu passer les noms de formulaire et de champ en paramètre comme 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
     
            function completer_champs_banque(formulaire,champ,longueur)
    {
      /** formulaire : nom du formulaire qui contient le champ à compléter
          champ : champ du formulaire à compléter par des zéros
          longueur : longueur voulue au final   */
     
      var donnee_saisie = window.document.formulaire.champ.value;
      var longueur_donnee_saisie = donnee_saisie.length;
     
      if (longueur_donnee_saisie < longueur)
       for (var i = longueur_donnee_saisie; i < longueur ; i++)
             donnee_saisie = "0"+ donnee_saisie;
    }
    Mais là ca ne passe pas : window.document.formulaire.champ.value n'est pour lui pas un objet ou a la valeur nulle, autrement dit il ne comprend pas que formulaire et champ sont les paramètres donnés.

    En cherchant j'ai compris que ces paramètres étaient même inutile, puisque il suffit d'appeler this.value dans la balise "input" pour récupérer directement la valeur et la donner en paramètre à la fonction. Mais ca ne fonctionne pas mieux...

    Bref il y a un certainement un point qui m'a échappé dans la programmation javascript, car j'ai l'impression de coincer sur un problème du à une méconnaissance du langage...

    Merci à tous ceux qui voudront bien m'aider.

    Athorus

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    Salut,

    préfère la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById ('id_de_ton_objet')
    pour récupérer un élément de ta page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" id="text1" />
    edit : Je ne sais pas si je réponds à ta question

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Salut,

    Merci de ta réponse. J'ai effectivement vu cette solution, qui ne répond en fait pas exactement à ma question : elle m'oblige à prendre chaque champ un par un, là ou j'essaye de généraliser au maximum ma fonction.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    Hmmmm ... j'aurai besoin de plus de précision
    Que désires tu faire exactement ?
    A quelle moment tu veux que cela complète l'entrée du visiteur ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Le champ est complété dès que l'utilisateur clique ailleurs, je fais donc appel à la fonction "onChange".
    En fait j'ai 3 formulaires qui devraient faire appel à cette fonction pour au moins 4 champs, soit 12 champs minimum répartis sur plusieurs formulaires... D'ou l'utilité d'avoir une fonction la plus générale possible. Dans sa forme actuelle (qui marche et que je n'ai pas donné ici), je suis obligé d'indiquer en dur dans le code le nom du formulaire et le nom du champ... Autrement dit de recopier 12 fois la fonction

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    Essais toujours ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function completer_champs_banque(idChamps, longueur)
    {
      var donnee_saisie = document.getElementById('idChamp').value;
      var longueur_donnee_saisie = donnee_saisie.length;
     
       if (longueur_donnee_saisie < longueur)
       {
          for (var i = longueur_donnee_saisie; i < longueur ; i++)
                donnee_saisie = "0"+ donnee_saisie;
     
           document.getElementById('idChamps').value = donnee_saisie;
       }
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Ta solution est très semblable à celle que je viens d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function completer_champs_banque(valeur,longueur)
    {
      /** formulaire : nom du formulaire qui contient le champ à compléter
          champ : champ du formulaire à compléter par des zéros
          longueur : longueur voulue au final   */
     
      var longueur_donnee_saisie = valeur.length;
      if (longueur_donnee_saisie < longueur)
       for (var i = longueur_donnee_saisie; i < longueur ; i++)
             valeur = "0"+ valeur;
             this.value=valeur;
     
    }
    Puis dans la balise input : onChange="completer_champs_banque(this.value,11);"

    Pas d'erreur, et la valeur est bien converti avec des zéros. Seul problème, le résultat s'affiche pas dans le champ quand je clique ailleurs, ce qui pourtant marchait avant.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    tu lui passes la valeur, ce n'est pas un pointeur sur celle ci, si tu la modifies dans ta fonction il ne la modifie pas autre part

    Il faut lui passer l'id du champs pour qu'il sache quoi modifier

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Je suis d'accord, d'ou mon this.value = valeur; à la fin de ma fonction...

    Et quand je lui demande de m'afficher cette valeur (this.value), elle est bonne! Il veut juste pas me la mettre dans le champ qui est clairement définit par le this.value qui équivaut à un window.document.formulaire.champ.value, donc pas besoin d'id je pense...

  10. #10
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Désolé mais tu manques de logique... imaginons le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Fnc=function(nom, obj) {
        return obj.nom;
    }
     
    var x=new Object();
    x.nom="Roberto";
    x.age=43;
    alert(Fnc("age",x));
    ... Crois tu vraiment que tu vas obtenir 43 dans ton alert ???

    Sois réaliste...
    La solution est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(obj["age"] == obj.age) // Afficera toujours 'true'
    Et ensuite je te parlerai du point dont le sous-post au dessus parlait lui aussi : this.value est une VALEUR, pas une référence...
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var x=0; var y=x; y=1; alert(x);
    Crois tu vraiment que x vaudra 1 ? Ben pour le this.value, c'est pareille...

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Merci pour ta remarque, mais pour être franc je vois pas le lien avec mon problème. J'ai testé la solution qui m'a été donné par tuxout et confirme qu'elle marche, cependant je vois toujours pas pourquoi ma fonction qui fonctionnait très bien quand je lui donnais tout le chemin en dur, ne marche plus quand ces même éléments deviennent des paramètres.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    C'est un problème de portée ...
    Tu entres dans une fonction et les variables sont copiées, tu ne pointes pas dessus et donc ne peux les changer.

  13. #13
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    M'enfin, tu as lu mon exemple ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Fnc=function(nom, obj) {
        return obj.nom;
    }
     
    var x=new Object();
    x.nom="Roberto";
    x.age=43;
    alert(Fnc("age",x));
    obj.nom renverra TOUJOURS le MEMBRE nommé "nom" de OBJ...
    même si obj est une variable...
    tu trouverais ca normal qu'on puisse faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var obj=new Object();
    obj.x = 0
    alert(obj.x) // 0
    obj.y = 1
    alert(obj.x) // 0
    var x= "y"
    alert(obj.x) //0
    et que cela donne "1" ? Pourtant c'est exactement ce que tu fais...

    Je te dis que tu dois utiliser obj["y"] pour obtenir obj.y... et donc aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var obj=new Object();
    obj.x = 0
    obj.y = 1
    var x= "y"
    alert(obj[x]) // 1

  14. #14
    Membre expérimenté Avatar de Seb19
    Homme Profil pro
    Concepteur SOA
    Inscrit en
    Septembre 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur SOA

    Informations forums :
    Inscription : Septembre 2005
    Messages : 217
    Par défaut
    Citation Envoyé par Athorus
    Bonjour,
    j'ai un problème avec une fonction dont le but est de compléter les champs d'un formulaire par des zéros si la longueur est insuffisante : par exemple, pour un numéro de compte bancaire, si l'utilisateur tape 7 chiffres, elle rajoutera 4 zéros devant pour atteindre les 11 chiffres que comporte tous les comptes.

    Devant appliquer cette fonction à plusieurs champs et plusieurs formulaires...
    Bonjour,

    Le petit exemple ci dessous permet de compléter par des 0 un champ afin que la longueur fasse 11 caractères.
    La fonction marche avec plusieurs formulaires sur la même page et si tu veux le faire dans plusieurs pages différentes, il te suffit de mettre la fonction javascript dans un .js que tu appéleras au début de chaque page par un include.

    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
     
    <html>
    <head>
    <script language="javascript">
    function formateChamp(object) {
    	if (object.value.length < 11) {
    		alert("longueur du champ "+object.name+" : "+object.value.length);
    		var valeur = "";
    		for (i=0; i<11-object.value.length; i++) {
    			valeur = valeur + "0";
    		}
    		valeur = valeur + object.value;
    		object.value = valeur;
    	}
    }
    </script>
    <body>
    <form name="form1">
    <input type="text" name="champ1" onBlur="formateChamp(this);">
    </form>
    <form name="form2">
    <input type="text" name="champ2" onBlur="formateChamp(this);">
    </form>
    </body>
    </html>

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 47
    Par défaut
    Merci à tous pour votre aide, avec tout ca j'ai de quoi m'en sortir

    Fremy j'ai bien lu tes exemples, et effectivement je vois pas pourquoi (pour l'instant) ton alert(obj.x) ne vaudrait pas 1, puisque x prend la valeur de y...
    Mais là à mon avis c'est ma méconaissance de la programmation orientée objet qui est à mettre en cause. Ca devrait aller mieux quand j'aurais avalé mon livre javascript

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/05/2009, 21h02
  2. Réponses: 4
    Dernier message: 11/09/2008, 17h03
  3. recuperer le nom des formulaires
    Par wave95 dans le forum SharePoint
    Réponses: 0
    Dernier message: 28/01/2008, 19h22
  4. [formulaire] nom des champs
    Par atlantideD dans le forum Access
    Réponses: 5
    Dernier message: 19/07/2007, 12h26
  5. Nom des formulaires & MSysObjects
    Par coucoudjam dans le forum Access
    Réponses: 2
    Dernier message: 04/03/2006, 13h43

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