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>