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 :

déboguage d'une fct censée afficher la photo des personnes quand la souris survole leur nom


Sujet :

JavaScript

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut déboguage d'une fct censée afficher la photo des personnes quand la souris survole leur nom
    Bonsoir,

    qqun aurait-il la patience de décortiquer le code suivant ? Je ne peux montrer le site correspondant car c'est un intranet. En gros, on récupère des infos (nom, adresse, téléphone, URL photo...) sur des employés (à partir d'un fichier XML), dont on souhaite afficher la photo qd la souris survole leur nom. Tout marche bien (récupération des infos et affichage du nom de chq employé ; le pb, c'est que qd la souris survole le nom des employés, c'est systématiquement la photo du 1er qui s'affiche. Et j'ai beau avoir passé plusieurs jours dessus, rien n'y fait . J'ai rajouté ds le code des commentaires pour indiquer où tout va bien et où se situe le pb. Si qqun pouvait regarder ça, ça serait charitable. (Les variables "h_xxx" sont des variables système)

    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <script></script>
      <title>Member ID - Author : Laurent Schmitt - All rights
    reserved le 2 (et plus) octobre 2009</title>
      <style>.photo div.popup{visibility: hidden;
    z-index: 10;
    top: 120px;
    left: 200px;
    position: absolute;
    background-color:white;
    border-color:black;
    }
    span:hover.photo div.popup{
    visibility: visible;
    }
    span .photo div:hover.popup{
    visibility: visible;
    }
      </style>
    </head>
    <body>
    <script>
    function extract_First_LastName(ch)
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    var chaineCN=ch.indexOf("CN=");
    var blanc=ch.indexOf(" ");
    var coma=ch.indexOf(",");
    var FirstName=ch.substring(chaineCN+3,blanc);
    var LastName=ch.substring(blanc+1,coma);
    //mise en forme
    var URL='http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey='+LastName+'%2C%20'+FirstName+'&count=3';
    return URL;
    }
    //
    //
    //
    function extract_NotesID(ch) // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    ch=ch.replace("CN=","");ch=ch.replace(",OU=","/");
    do { // retirer tous les ",O=" (il peut y en avoir plusieurs)
    ch=ch.replace(",O=","/");
    }
    while (ch.indexOf(",")!=-1);
    //document.write(ch+"<br>");
    return ch;
    } // nom au format 'Laurent Schmitt/FR/Schneider'
    function loadsesa(username){ // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    var sesa="h_sesaList";
    var xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(extract_First_LastName(username)); // appel URL de l'annuaire international
    var sesaArray = new Array();
    var topEntry=xmlsesa.selectSingleNode("viewentries");
    var entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    var ind=0;
    if (entry!=null){
    do {
    var sUnid = entry.getAttribute('unid');
    var Item = entry.childNodes.item(2); /* "2" correspond à la colonne du xml contenant le code SESA ds un fichier de ce type : http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey=Schmitt%2C%20Laurent */
    var name = Item.getAttribute('name');
    var sItemText = Item.text;
    var value = sItemText;
    sesaArray[ind] = value;
    //document.write("SESA["+ind+"]="+sesaArray[ind]+"<br>");
    entry=entry.nextSibling;
    ind++;
    } // do
    while (entry!=null)
    }
    return sesaArray; // renvoie un tableau de codes SESA selon le paramètre "count" de l'URL
    }
    //
    //
    //
    function display_photo(photo,prenom,nom)
    {
    //
    // Cette fct marche (inutile de s'attarder) ; j'utilise un code html + js 
    // fortement échappé (\).
    //
    if (photo.length>0) {
    while(photo.indexOf(" ")!=-1)
    {
    photo=photo.replace(" ","%20");
    }
    document.write("<font color=\"blue\"><\/font>");
    document.write("<span onmouseover=\"document.getElementById(\'popupid\').style.visibility = \'visible\';\"><span");
    document.write(" class=\"photo\">"+prenom+" "+nom+"<span");
    document.write(" onmouseout=\"document.getElementById(\'popupid\').style.visibility = \'hidden\';\">");
    document.write("<div style=\"visibility: hidden;\" class=\"popup\"");
    document.write(" id=\"popupid\"><span><img");
    document.write(" src="+photo+"><\/span><br><\/div>");
    document.write("<\/span><\/span><\/span><\/font><br>");
    }
    else { document.write("<br>");}
    }
    //
    //
    //
    function load_personal_data(sesa){
    //
    // Le pb est là : malgré la boucle qui est censée parcourir plusieurs employés, le nom de chacun est correct
    // par contre la photo qui s'affiche qd la souris survole ce nom est la même pour tous les employés !
    //
    var i=0,URL,sesa,xmlsesa;
    var sesainfo = new Array(2);
    sesainfo[0] = new Array(2);
    sesainfo[1] = new Array(2);
    var topEntry,entry;
    var nomemploye,prenomemploye,adresseemploye,villeemploye,siteemploye,telemploye,cellemploye,mailemploye,value;
    for (i=0;i<sesa.length;i++) { // parcourir tous les codes SESA (c'est avec ça qu'on identifie informatiquement chaque employé)
    // construire l'URL avec les infos donn&eacute;es par le code SESA du type :
    // http://ids.schneider-electric.com/global/corp/ecd.nsf/xmlemployeesactivebyguid?readviewentries&amp;StartKey=SESA21805&amp;count=1)
    // appeler l'URL (cette URL va chercher un fichier XML, contenant plein d'infos sur l'employé)
    sesa="h_sesaList";
    xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(URL); // appel URL du code XML à partir du code SESA
    //pour chq item intéressant,
    // récupérer la valeur
    topEntry=xmlsesa.selectSingleNode("viewentries");
    entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    //var sUnid2 = entry.getAttribute('unid');
    nomemploye=entry.childNodes.item(2);
    prenomemploye=entry.childNodes.item(4);
    adresseemploye=entry.childNodes.item(26);
    villeemploye=entry.childNodes.item(30);
    siteemploye=entry.childNodes.item(25);
    telemploye=entry.childNodes.item(14);
    cellemploye=entry.childNodes.item(16);
    mailemploye=entry.childNodes.item(10);
    idnotesemploye=entry.childNodes.item(9);
    urlphotoemploye=entry.childNodes.item(37);
    sesainfo[i][0] = nomemploye.text;
    sesainfo[i][1] = prenomemploye.text;
    sesainfo[i][2] = adresseemploye.text;
    sesainfo[i][3] = villeemploye.text;
    sesainfo[i][4] = siteemploye.text;
    sesainfo[i][5] = telemploye.text;
    sesainfo[i][6] = cellemploye.text;
    sesainfo[i][7] = cellemploye.text;
    sesainfo[i][8] = idnotesemploye.text;
    sesainfo[i][9] = urlphotoemploye.text;
    display_photo(urlphotoemploye.text,prenomemploye.text,nomemploye.text);
    // Le problème est que malgré la boucle, la photo affichée est la même pour tous les employés
    } // end for
    return sesainfo;
    }
    </script>
    //
    //
    //
    <table border="0" width="100%">
      <tbody>
        <tr>
          <td class="h-fieldHeaderEdit-bgtext">
          <script>
    var sesaArray=loadsesa(h_LastEditorDistinguishedName);
    extract_NotesID(h_LastEditorDistinguishedName);
    load_personal_data(sesaArray);
          </script></td>
        </tr>
      </tbody>
    </table>
    </body>
    </html>

  2. #2
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    Je sais pas si le problème vient de là mais y'a un truc que je trouve vraiment bizarre: tu déclares un tableau à 2 dimensions de 2 cases sur 2 cases et ensuite tu utilises des coordonnées qui sortent du tableau.

    Il me semble que je t'avais répondu à comment déclarer un tableau ou je t'avais mit cet exemple de déclaration, mais c'était pour un tableau de 2 cases sur 2 cases.

    Après il faut adapter ça à la taille que tu veux.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse ; donc le pb est là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [sesainfo[0] = new Array(2);
    sesainfo[1] = new Array(2);
    et ce sont la taille de ces deux tableaux qu'il faudrait augmenter ?

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Points : 111
    Points
    111
    Par défaut
    Bonjour,

    Tu déclares des variables locales mais je n'y retrouve pas 'urlphotoemploye' (par contre value est déclarée mais pas utilisée). N'aurais-tu pas une variable globale de même nom ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var nomemploye,prenomemploye,adresseemploye,villeemploye,siteemploye,telemploye,cellemploye,mailemploye,value;

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci pour vos 2 réponses : je les testerai dès que le serveur utilisé pour le site intranet remarche (pour l'instant, il est HS).
    Je n'ai pas de variable "value" globale ; j'ai remplacé sa déclaration par celle de "urlphotoemploye" ; j'ai également passé les tableaux sesainfo[0 et 1] à des tailles respectives de 3 et 9. De plus, j'ai corrigé un bug que vous ne m'aviez pas signalé : ds la fct à pb, il y avait une variable locale qui portait le même nom que le paramètre ("sesa").
    Je suis impatient de pouvoir tester tout ça. J'avais bien essayé de tout reproduire en local pour tester la fct, mais je n'y suis pas arrivé (en tout cas, ce que vous m'avez signalé expliquerait bien le pb : c'est juste la photo qui ne s'affiche pas correctement alors que les noms sont corrects : et c'est justement les 2 1ers paramètres du tableau ; la seule chose bizarre est que un des noms qui s'affiche est sur la 3e ligne du tableau...)

  6. #6
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    C'est tout à fait la réflexion que je me suis faite à vrai dire.

    Si au passage tu as toujours un doute sur comment t'as déclaré ton tableau, il te faut faire comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var sesainfo = new Array[3]
    sesainfo[0] = new Array[9]
    sesainfo[1] = new Array[9]
    sesainfo[2] = new Array[9]

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci pour l'information (j'ai pû tester car le serveur remarche) mais j'ai encore un problème, et c'est sûrement un problème de JS. D'abord, voici mon code mis à jour :
    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <script></script>
      <title>Member ID - Author : Laurent Schmitt - All rights
    reserved le 2 (et plus) octobre 2009</title>
      <style>.photo div.popup{visibility: hidden;
    z-index: 10;
    top: 120px;
    left: 200px;
    position: absolute;
    background-color:white;
    border-color:black;
    }
    span:hover.photo div.popup{
    visibility: visible;
    }
    span .photo div:hover.popup{
    visibility: visible;
    }
      </style>
    </head>
    <body>
    <script>
    function extract_First_LastName(ch)
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    var chaineCN=ch.indexOf("CN=");
    var blanc=ch.indexOf(" ");
    var coma=ch.indexOf(",");
    var FirstName=ch.substring(chaineCN+3,blanc);
    var LastName=ch.substring(blanc+1,coma);
    //mise en forme
    var URL='http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey='+LastName+'%2C%20'+FirstName+'&count=3';
    return URL;
    }
    //
    //
    //
    function extract_NotesID(ch) // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    ch=ch.replace("CN=","");ch=ch.replace(",OU=","/");
    do { // retirer tous les ",O=" (il peut y en avoir plusieurs)
    ch=ch.replace(",O=","/");
    }
    while (ch.indexOf(",")!=-1);
    //document.write(ch+"<br>");
    return ch;
    } // nom au format 'Laurent Schmitt/FR/Schneider'
    function loadsesa(username){ // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    var sesa="h_sesaList";
    var xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(extract_First_LastName(username)); // appel URL de l'annuaire international
    var sesaArray = new Array();
    var topEntry=xmlsesa.selectSingleNode("viewentries");
    var entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    var ind=0;
    if (entry!=null){
    do {
    var sUnid = entry.getAttribute('unid');
    var Item = entry.childNodes.item(2); /* "2" correspond à la colonne du xml contenant le code SESA ds un fichier de ce type : http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey=Schmitt%2C%20Laurent */
    var name = Item.getAttribute('name');
    var sItemText = Item.text;
    var value = sItemText;
    sesaArray[ind] = value;
    //document.write("SESA["+ind+"]="+sesaArray[ind]+"<br>");
    entry=entry.nextSibling;
    ind++;
    } // do
    while (entry!=null)
    }
    return sesaArray; // renvoie un tableau de codes SESA selon le paramètre "count" de l'URL
    }
    //
    //
    //
    function display_photo(photo,prenom,nom)
    {
    //
    // Cette fct marche (inutile de s'attarder) ; j'utilise un code html + js 
    // fortement échappé (\).
    //
    if (photo.length>0) {
    while(photo.indexOf(" ")!=-1)
    {
    photo=photo.replace(" ","%20");
    }
    document.write("<font color=\"blue\"><\/font>");
    document.write("<span onmouseover=\"document.getElementById(\'popupid\').style.visibility = \'visible\';\"><span");
    document.write(" class=\"photo\">"+prenom+" "+nom+"<span");
    document.write(" onmouseout=\"document.getElementById(\'popupid\').style.visibility = \'hidden\';\">");
    document.write("<div style=\"visibility: hidden;\" class=\"popup\"");
    document.write(" id=\"popupid\"><span><img");
    document.write(" src="+photo+"><\/span><br><\/div>");
    document.write("<\/span><\/span><\/span><\/font><br>");
    }
    else { document.write("<br>");}
    }
    //
    //
    //
    function load_personal_data(sesa){
    //
    /* Le pb est là : malgré la boucle qui est censée parcourir plusieurs employés, le nom de chacun est correct
    par contre la photo qui s'affiche qd la souris survole ce nom est la même pour tous les employés ! (En fait, il n'y a que le premier et le dernier, le 2e n'ayant
     pas de photo). */
    //
    var i=0,URL,codesesa,xmlsesa;
    var sesainfo = new Array(3);
    sesainfo[0] = new Array(9);
    sesainfo[1] = new Array(9);
    sesainfo[2] = new Array(9);
    var topEntry,entry;
    var nomemploye,prenomemploye,adresseemploye,villeemploye,siteemploye,telemploye,cellemploye,mailemploye,idnotesemploye,urlphotoemploye;
    for (i=0;i<sesa.length;i++) { // parcourir tous les codes SESA (c'est avec ça qu'on identifie informatiquement chaque employé)
    // construire l'URL avec les infos donn&eacute;es par le code SESA du type :
    // http://ids.schneider-electric.com/global/corp/ecd.nsf/xmlemployeesactivebyguid?readviewentries&amp;StartKey=SESA21805&amp;count=1)
    // appeler l'URL (cette URL va chercher un fichier XML, contenant plein d'infos sur l'employé)
    codesesa="h_sesaList";
    xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(URL); // appel URL du code XML à partir du code SESA
    //pour chq item intéressant,
    // récupérer la valeur
    topEntry=xmlsesa.selectSingleNode("viewentries");
    entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    //var sUnid2 = entry.getAttribute('unid');
    nomemploye=entry.childNodes.item(2);
    prenomemploye=entry.childNodes.item(4);
    adresseemploye=entry.childNodes.item(26);
    villeemploye=entry.childNodes.item(30);
    siteemploye=entry.childNodes.item(25);
    telemploye=entry.childNodes.item(14);
    cellemploye=entry.childNodes.item(16);
    mailemploye=entry.childNodes.item(10);
    idnotesemploye=entry.childNodes.item(9);
    urlphotoemploye=entry.childNodes.item(37);
    /* visiblement, grâce aux pièges que j'avais insérés, j'ai constaté qu'on ne passe jamais là, pour le dernier employé (le 3e) */
    sesainfo[i][0] = nomemploye.text;
    sesainfo[i][1] = prenomemploye.text;
    sesainfo[i][2] = adresseemploye.text;
    sesainfo[i][3] = villeemploye.text;
    sesainfo[i][4] = siteemploye.text;
    sesainfo[i][5] = telemploye.text;
    sesainfo[i][6] = cellemploye.text;
    sesainfo[i][7] = mailmploye.text;
    sesainfo[i][8] = idnotesemploye.text;
    sesainfo[i][9] = urlphotoemploye.text;
    display_photo(urlphotoemploye.text,prenomemploye.text,nomemploye.text);
    } // end for
    return sesainfo;
    }
    </script>
    //
    //
    //
    <table border="0" width="100%">
      <tbody>
        <tr>
          <td class="h-fieldHeaderEdit-bgtext">
          <script>
    var sesaArray=loadsesa(h_LastEditorDistinguishedName);
    extract_NotesID(h_LastEditorDistinguishedName);
    load_personal_data(sesaArray);
          </script></td>
        </tr>
      </tbody>
    </table>
    </body>
    </html>
    Le problème, c'est que pour le dernier employé, on affiche encore la photo du premier, et je sèche... (j'ai mis un commentaire pour indiquer où, anormalement, on ne passe pas)

  8. #8
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    Dans ta boucle Pour tu donnes la condition que i doit être inférieur à sesa.length, à mon avis ce serait plutôt sesainfo.length

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    C'était bien vu et j'y ai même crû, mais en fait, "sesainfo" est une variable locale, et la boucle porte bien sur le tableau "sesa" passé en paramètre.
    Cela dit, comme j'avais vu qu'on ne passait jamais ds une partie importante du code pour le dernier employé, j'ai eu l'idée d'incrémenter de un la lecture du fichier XML qui contient les données des employés, mais ça n'a rien changé...
    Mais plus possible de faire de nvx essais avant demain, le serveur étant de nouveau HS.

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Le temps d'écrire ça et le serveur remarche...Mais ayant incrémenté de un la lecture du fichier XML, quand la souris survole le nom des 3e et 4e employés, la photo affichée est encore celle du premier. Aurais-tu une idée pour m'aider (4 jours passés sur une fct que j'avais estimée à 1 ou 2 heures...) ? (La taille des colonnes du tableau "sesainfo" est 10 pas 9, vu que ça va de 0 à 9).

    Pour info, voici mon dernier 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
    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <script></script>
      <title>Member ID - Author : Laurent Schmitt - All rights
    reserved le 2 (et plus) octobre 2009</title>
      <style>.photo div.popup{visibility: hidden;
    z-index: 10;
    top: 120px;
    left: 200px;
    position: absolute;
    background-color:white;
    border-color:black;
    }
    span:hover.photo div.popup{
    visibility: visible;
    }
    span .photo div:hover.popup{
    visibility: visible;
    }
      </style>
    </head>
    <body>
    <script>
    function extract_First_LastName(ch)
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    var chaineCN=ch.indexOf("CN=");
    var blanc=ch.indexOf(" ");
    var coma=ch.indexOf(",");
    var FirstName=ch.substring(chaineCN+3,blanc);
    var LastName=ch.substring(blanc+1,coma);
    //mise en forme
    var URL='http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey='+LastName+'%2C%20'+FirstName+'&count=4';
     /* on lit ici les données de 4 employés */
    return URL;
    }
    //
    //
    //
    function extract_NotesID(ch) // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    {
    //
    // Cette fct marche (inutile de s'attarder)
    //
    ch=ch.replace("CN=","");ch=ch.replace(",OU=","/");
    do { // retirer tous les ",O=" (il peut y en avoir plusieurs)
    ch=ch.replace(",O=","/");
    }
    while (ch.indexOf(",")!=-1);
    //document.write(ch+"<br>");
    return ch;
    } // nom au format 'Laurent Schmitt/FR/Schneider'
    function loadsesa(username){ // nom au format 'CN=Laurent Schmitt,OU=FR,O=Schneider'
    var sesa="h_sesaList";
    var xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(extract_First_LastName(username)); // appel URL de l'annuaire international
    var sesaArray = new Array();
    var topEntry=xmlsesa.selectSingleNode("viewentries");
    var entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    var ind=0;
    if (entry!=null){
    do {
    var sUnid = entry.getAttribute('unid');
    var Item = entry.childNodes.item(2); /* "2" correspond à la colonne du xml contenant le code SESA ds un fichier de ce type : http://ids.schneider-electric.com/global/corp/ecd.nsf/EmployeesCard?readviewentries&startkey=Schmitt%2C%20Laurent */
    var name = Item.getAttribute('name');
    var sItemText = Item.text;
    var value = sItemText;
    sesaArray[ind] = value;
    //document.write("SESA["+ind+"]="+sesaArray[ind]+"<br>");
    entry=entry.nextSibling;
    ind++;
    } // do
    while (entry!=null)
    }
    return sesaArray; // renvoie un tableau de codes SESA selon le paramètre "count" de l'URL
    }
    //
    //
    //
    function display_photo(photo,prenom,nom)
    {
    //
    // Cette fct marche (inutile de s'attarder) ; j'utilise un code html + js 
    // fortement échappé (\).
    //
    if (photo.length>0) {
    while(photo.indexOf(" ")!=-1)
    {
    photo=photo.replace(" ","%20");
    }
    document.write("<font color=\"blue\"><\/font>");
    document.write("<span onmouseover=\"document.getElementById(\'popupid\').style.visibility = \'visible\';\"><span");
    document.write(" class=\"photo\">"+prenom+" "+nom+"<span");
    document.write(" onmouseout=\"document.getElementById(\'popupid\').style.visibility = \'hidden\';\">");
    document.write("<div style=\"visibility: hidden;\" class=\"popup\"");
    document.write(" id=\"popupid\"><span><img");
    document.write(" src="+photo+"><\/span><br><\/div>");
    document.write("<\/span><\/span><\/span><\/font><br>");
    }
    else { document.write("<br>");}
    }
    //
    //
    //
    function load_personal_data(sesa){
    //
    // Le pb est là : malgré la boucle qui est censée parcourir plusieurs employés, le nom de chacun est correct
    // par contre la photo qui s'affiche qd la souris survole ce nom est la même pour tous les employés !
    //
    var i=0,URL,codesesa,xmlsesa;
    var sesainfo = new Array(3);
    sesainfo[0] = new Array(10);
    sesainfo[1] = new Array(10);
    sesainfo[2] = new Array(10);
    var topEntry,entry;
    var nomemploye,prenomemploye,adresseemploye,villeemploye,siteemploye,telemploye,cellemploye,mailemploye,idnotesemploye,urlphotoemploye;
    for (i=0;i<sesa.length;i++) { // parcourir tous les codes SESA (c'est avec ça qu'on identifie informatiquement chaque employé)
    // construire l'URL avec les infos donn&eacute;es par le code SESA du type :
    // http://ids.schneider-electric.com/global/corp/ecd.nsf/xmlemployeesactivebyguid?readviewentries&amp;StartKey=SESA21805&amp;count=1)
    // appeler l'URL (cette URL va chercher un fichier XML, contenant plein d'infos sur l'employé)
    codesesa="h_sesaList";
    xmlsesa = new ActiveXObject("Microsoft.XMLDOM");
    xmlsesa.async="false";
    xmlsesa.load(URL); // appel URL du code XML à partir du code SESA
    //pour chq item intéressant,
    // récupérer la valeur
    topEntry=xmlsesa.selectSingleNode("viewentries");
    entry=xmlsesa.selectSingleNode("viewentries/viewentry");
    //var sUnid2 = entry.getAttribute('unid');
    nomemploye=entry.childNodes.item(2);
    prenomemploye=entry.childNodes.item(4);
    adresseemploye=entry.childNodes.item(26);
    villeemploye=entry.childNodes.item(30);
    siteemploye=entry.childNodes.item(25);
    telemploye=entry.childNodes.item(14);
    cellemploye=entry.childNodes.item(16);
    mailemploye=entry.childNodes.item(10);
    idnotesemploye=entry.childNodes.item(9);
    urlphotoemploye=entry.childNodes.item(37);
    sesainfo[i][0] = nomemploye.text;
    sesainfo[i][1] = prenomemploye.text;
    sesainfo[i][2] = adresseemploye.text;
    sesainfo[i][3] = villeemploye.text;
    sesainfo[i][4] = siteemploye.text;
    sesainfo[i][5] = telemploye.text;
    sesainfo[i][6] = cellemploye.text;
    sesainfo[i][7] = cellemploye.text;
    sesainfo[i][8] = idnotesemploye.text;
    sesainfo[i][9] = urlphotoemploye.text;
    display_photo(urlphotoemploye.text,prenomemploye.text,nomemploye.text);
    // Le problème est que malgré la boucle, la photo affichée est la même pour tous les employés
    } // end for
    return sesainfo;
    }
    </script>
    //
    //
    //
    <table border="0" width="100%">
      <tbody>
        <tr>
          <td class="h-fieldHeaderEdit-bgtext">
          <script>
    var sesaArray=loadsesa(h_LastEditorDistinguishedName);
    extract_NotesID(h_LastEditorDistinguishedName);
    load_personal_data(sesaArray);
          </script></td>
        </tr>
      </tbody>
    </table>
    </body>
    </html>

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Points : 111
    Points
    111
    Par défaut
    Finalement, je pense que tu cherches du mauvais côté.
    Si j'ai bien compris ton code, tu affiches autant de div contenaire de photo qu'il y a de photos. Seulement ils portent tous le même ID : popupid Et comme tu le rends visible par un getElementById, tu obtiens toujours le même résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    document.write("<font color=\"blue\"><\/font>");
    document.write("<span onmouseover=\"document.getElementById(\'popupid\').style.visibility = \'visible\';\"><span");
    document.write(" class=\"photo\">"+prenom+" "+nom+"<span");
    document.write(" onmouseout=\"document.getElementById(\'popupid\').style.visibility = \'hidden\';\">");
    document.write("<div style=\"visibility: hidden;\" class=\"popup\"");
    document.write(" id=\"popupid\"><span><img");
    document.write(" src="+photo+"><\/span><br><\/div>");
    document.write("<\/span><\/span><\/span><\/font><br>");
    Essaye en ajoutant un compteur à popupid

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci infiniment ; c'était la bonne piste ; donc, c'était juste un pb de html et pas de js.
    Je précise que je suis super content de l'existence de ce forum, car avec, j'ai récupéré plusieurs codes de js et de PHP que j'aurais été incapable de faire moi-même (et résolu des pbs comme celui-ci).

  13. #13
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    oui si tant est que l'on peut appeler "résoudre" un script qui ecrit du html avec document.write ...
    Je te conseille de te pencher sur le DOM ...

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Tu dois avoir raison : c'est la deuxième fois qu'on me parle du DOM concernant le HTML écrit avec des "document.write" : je precise que 1)il y a qq mois, je ne connaissais rien au js 2) ce code est en grande partie une récup (d'un code sur un site intranet, la même destination que ce code-ci) 3) j'ignore complètement ce qu'est le DOM.

  15. #15
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Pour résumer : au lieu de rediger du code HTML sur la page en espérant que le navigateur l'interprète au mieux, il est possible en javascript de créer des objets au moyen de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.createElment("[balise"])
    les objets ainsi créés sont mieux pris en compte par les navigateurs.

    Document.write est à javascript ce que le pied de biche est à l'horloger ...

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci pour l'explication, mais pourrais-tu me donner un exemple ?

  17. #17
    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 640
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var newObj=document.createElement('div');
    newObj.style.width="100px";
    newObj.style.height="100px";
    newObj.style.backgroundColor="red";
    document.body.appendChild(newObj)

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

Discussions similaires

  1. [AC-2007] Photo des personnes
    Par titi57 dans le forum IHM
    Réponses: 6
    Dernier message: 08/08/2013, 14h16
  2. Réponses: 1
    Dernier message: 07/02/2013, 15h10
  3. [1.x] Afficher la liste des personnes connectées
    Par babyboy6492 dans le forum Symfony
    Réponses: 4
    Dernier message: 29/11/2010, 18h42
  4. [MySQL] Afficher les photos des annonces
    Par yanng dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 09/03/2009, 00h24
  5. Afficher les photos des salariés dans un état
    Par cedricvmtubes dans le forum IHM
    Réponses: 4
    Dernier message: 14/01/2009, 13h42

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