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 :

Compréhension de code


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut Compréhension de code
    Bonjour,

    Voilà j'essaie d'expliquer un code mais je n'arrive pas à le comprendre...

    Sauriez vous me l'expliquer svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function f(id, fields) {
        f = document.forms[id];
        for (fieldname in fields) {
            value = fields[fieldname];
            if (typeof (value) == 'object') {
                for (j in value) f.innerHTML += '<input type="hidden" name="' + fieldname + '" value="' + dF(value[j][0], value[j][1]) + '" />';
            } else {
                f.innerHTML += '<input type="hidden" name="' + i + '" value="' + dF(fields[i]) + '" />';
            }
        }
    }

  2. #2
    Expert éminent
    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 : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Je pense que cette fonction ajoute un certain nombre de champs <input type="hidden"> à un formulaire donné. Mais c'est assez crade, aucune variable n'est déclarée…
    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
    function f(id, fields) {
        f = document.forms[id]; // récupère le formulaire avec l'id passé en paramètre
        for (fieldname in fields) { // parcourt la liste de champs passée en paramètre
            value = fields[fieldname];
            if (typeof (value) == 'object') { // si on a un objet
                // on parcourt l'objet
                for (j in value) f.innerHTML += '<input type="hidden" name="' + fieldname + '" value="' + dF(value[j][0], value[j][1]) + '" />';
                // je ne sais pas ce que fait la fonction dF
                // ici on aura plusieurs input avec le même nom (fieldname), donc probablement des anciens input radio ou checkbox
            } else { // si value n'est pas un objet
                f.innerHTML += '<input type="hidden" name="' + i + '" value="' + dF(fields[i]) + '" />';
                // je ne sais pas d'où vient ce i
            }
        }
    }
    Sans plus d'infos, je ne peux pas trop t'aider, désolé.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                for (j in value) f.innerHTML += '<input type="hidden" name="' + fieldname + '" value="' + dF(value[j][0], value[j][1]) + '" />';
                // je ne sais pas ce que fait la fonction dF
                // ici on aura plusieurs input avec le même nom (fieldname), donc probablement des anciens input radio ou checkbox
            } else { // si value n'est pas un objet
                f.innerHTML += '<input type="hidden" name="' + i + '" value="' + dF(fields[i]) + '" />';
                // je ne sais pas d'où vient ce i
            }
    Alors moi ce que je ne comprend pas c'est la valeur de value(j)(0) ?!
    Parce que je veux bien qu'il y ai plein de variable partout ( y compris le i, également je ne sais pas d'où il vient :p )! Mais au départ on donne que deux paramètres: id et fields.
    On en vient à un tableau bidimentionnel?

  4. #4
    Expert éminent
    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 : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    En fait j'ai l'impression que i et fieldname sont la même variable, que l'auteur aurait commencé à renommer mais en aurait oublié la moitié.

    Pour moi, fields est un objet dont les propriétés sont soit des strings, soit des objets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fields = {
      fieldname1: "value1",
      fieldname2: "value2",
      fieldname3: { ... },
      ...
    }
    Dans le cas string, le nom et la valeur sont utilisés directement, par exemple <input type="hidden" name="fieldname1" value="dF('value1')" /> (c'est du code « avec les mains » mais j'espère que tu saisis l'idée).

    Dans le cas objet, notre auteur nous refait une boucle avec la variable j. Donc value[j] représente un membre de l'objet. Et apparemment, ce membre est un tableau, avec au moins 2 éléments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      ...
      fieldname3: {
        j1: [a1, b1],
        j2: [a2, b2],
        ...
      }
    Peut-être qu'il s'agit de coordonnées x/y (c'est le premier truc qui me vient à l'esprit). Tu en sauras plus si tu arrives à trouver d'autres bouts de code qui montrent comment cette fonction est appelée.

    Donc pour répondre à ta question, ce n'est pas vraiment un tableau bidi, mais plutôt une alternance d'accès à des membres d'objets / à des indices de tableaux. Les crochets [] servent à faire les deux.

    Comme je suis pas sûr d'être clair, un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var toto = { x: 42 };
    toto.x; // 42
    toto["x"]; // 42
     
    var membre = "x";
    toto[membre]; // 42

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    ca devient vraiment compliqué...
    J'ai continué a travaillé sur le même sujet et j'en suis arrivé à un script beaucoup plus clair. Sauf que dans le js il y a des syntaxt que je ne comprends pas du tout... Exemple ( ca tombe bien, tu le voulais! )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    f('post', {
        			'auth[]': [
            			['57%3A6%3B8gkghik6hfjh59i%3A9%53Djjj8%3E9jf5', 29],
            			['23%3B78522h97d552g9d624%32Ad9ef2c227c', 25]
     			   ]}); //]]>
    Ca c'est la fameuse fonction f qui se fait appeler. C'est pour ça que je te parlais de tableau bidimentionel car ici j'ai bien l'impression que 'auth' en est un oubien c'est un tableau qui en contien deux autres, comme tu dis.

  6. #6
    Expert éminent
    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 : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Ok donc en fait j est un indice de tableau. C'est pas forcément une bonne idée de parcourir un tableau avec for/in, mais passons.

    Au passage, je pense qu'on peut appliquer un decodeURIComponent aux chaînes qui contiennent des %XX. "57%3A6%3B8gkghik6hfjh59i%3A9%53Djjj8%3E9jf5" devient "57:6;8gkghik6hfjh59i:9SDjjj8>9jf5" et "23%3B78522h97d552g9d624%32Ad9ef2c227c" devient "23;78522h97d552g9d6242Ad9ef2c227c".

    Si on décortique l'exemple que tu viens de donner, ça donne quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    { // fields
       // fieldname == 'auth[]'
       'auth[]': [ // value
          // j == 0
          [  "57:6;8gkghik6hfjh59i:9SDjjj8>9jf5", 29          ], // value[0]
          // value[0][0]                          value[0][1]
     
          // j == 1
          [  "23;78522h97d552g9d6242Ad9ef2c227c", 25          ] // value[1]
          // value[1][0]                          value[1][1]
       ]
    }
    Donc on va se retrouver avec des appels à dF qui deviennent de plus en plus mystérieux…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dF("57:6;8gkghik6hfjh59i:9SDjjj8>9jf5", 29)
    dF("23;78522h97d552g9d6242Ad9ef2c227c", 25)
    Ils correspondent à la partie dF(value[j][0], value[j][1]).

    On peut également en conclure que les inputs généré ressembleront à ceci :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="hidden" name="auth[]" value="..." />
    <input type="hidden" name="auth[]" value="..." />

    Il va falloir que tu nous trouve le code de dF si tu veux qu'on avance

  7. #7
    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
    Points : 9 944
    Points
    9 944
    Par défaut
    Rien qu'à regarder les deux premières lignes je jette le code à la poubelle. Il assigne une variable f sans la déclarer avec le préfixe var, ce qui fait d'elle une variable globale par défaut, et qui plus est avec le même nom que la fonction !

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Mdr t'en fais pas sylvain j'ai reussis à le retranscrire en PHP ^^

    C'est vrai que le mec s'est fait chier x)

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

Discussions similaires

  1. compréhension de code en asp
    Par bidule123456 dans le forum ASP
    Réponses: 1
    Dernier message: 21/08/2007, 11h12
  2. compréhension de code (passage à une autre page)
    Par kokokaine dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/05/2007, 11h02
  3. Réponses: 3
    Dernier message: 12/01/2007, 09h42
  4. [VB-Access]recset! Pb de compréhension de code
    Par sk8bcn dans le forum VBA Access
    Réponses: 5
    Dernier message: 15/12/2006, 15h26
  5. Compréhension du code
    Par Ivanelis dans le forum Assembleur
    Réponses: 3
    Dernier message: 12/06/2006, 12h08

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