j'avais posté pour un problème similaire que je pensais résoudre en passant par des tableaux associatifs d'où le délestage .
présentation du sujet :
je définie un tableau
ce tableau correspond à l'existance de claques dont leur affichage doit être géré dynamiquement.
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 var tab_gene=new Array; tab_gene["candidat"]=new Array; // tableau du candidat tab_gene["groupe"]=new Array; // tableau du groupe tab_gene["projet"]=new Array; // tableau du projet tab_gene["client"]=new Array;// tableau du client // tab_gene["candidat"]["social"]=new Array; //social du candidat tab_gene["candidat"]["social"][0]=0; tab_gene["candidat"]["reel"]=new Array;//reel du candidat tab_gene["candidat"]["reel"][0]=0; tab_gene["candidat"]["pro"]=new Array;//pro du candidat tab_gene["candidat"]["pro"][0]=0; tab_gene["candidat"]["pro"][1]=0; tab_gene["candidat"]["prive"]=new Array;//prive du candidat tab_gene["candidat"]["prive"][0]=0; tab_gene["candidat"]["prive"][1]=0; // tab_gene["groupe"]["social"]=new Array; //social du candidat tab_gene["groupe"]["social"][0]=0; tab_gene["groupe"]["social"][1]=0; ... tab_gene["client"]["pro"]=new Array;//pro du candidat tab_gene["client"]["pro"][0]=0; tab_gene["client"]["pro"][1]=0; tab_gene["client"]["prive"]=new Array;//prive du candidat tab_gene["client"]["prive"][0]=0; tab_gene["client"]["prive"][1]=0;
pour cela, j'ai deux menu.
le premier est :candidat, groupe, projet, client
il sert à sélectionner un ensemble de calques
le second est, comme vous vous en doutez : reel, social , pro et prive
par les menus en sélectionnant donc groupe et pro, on doit afficher uniquement les calques pro du groupe.
vu que IE ne gère pas les Name sur les div, il faut que je passe par Id qui doit être unique (normal), d'où mon tableau.
pour contrôler l'affichage, j'ai 3 fonctions
une pour remettre à l'invisible
une pour gérer le 1er menu dit général
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 function raz_cand(candi,nom_tab){ var ii; var tab; for (ii=0; ii<candi[nom_tab]["reel"].length; ii++)//reel {tab=nom_tab+"_reel_"+[ii]; document.getElementById(tab).style.visibility='hidden'; document.getElementById(tab).style.display='none';} for (ii=0; ii<candi[nom_tab]["social"].length; ii++)//social {tab=nom_tab+"_social_"+[ii]; document.getElementById(tab).style.visibility='hidden'; document.getElementById(tab).style.display='none';} for (ii=0; ii<candi[nom_tab]["prive"].length; ii++)//prive {tab=nom_tab+"_prive_"+[ii]; document.getElementById(tab).style.visibility='hidden'; document.getElementById(tab).style.display='none';} for (ii=0; ii<candi[nom_tab]["pro"].length; ii++)//pro {tab=nom_tab+"_pro_"+[ii]; document.getElementById(tab).style.visibility='hidden'; document.getElementById(tab).style.display='none';} }
elle sert à donner le nom de l'ensemble général de calques, par exemple ceux du groupe et à faire un raz de l'ancien affichage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function menugene(tablo,nom){ raz_cand(tablo,selection); selection=nom; }
la dernière est l'affichage à proprement parlé que j'appelle sur le click du sous-ensemble par exemple pro
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 function menuclik(param,candid,nom) { var tabs; raz_cand(candid,nom); if(param=="all"){ for (var i=0; i<candid[nom]["reel"].length; i++) {tabs=nom+"_reel_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';} for (var i=0; i<candid[nom]["social"].length; i++) {tabs=nom+"_social_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';} for (var i=0; i<candid[nom]["prive"].length; i++) {tabs=nom+"_prive_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';} for (var i=0; i<candid[nom]["pro"].length; i++) {tabs=nom+"_pro_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';}} if(param=="reel"){ for (var i=0; i<candid[nom]["reel"].length; i++) {tabs=nom+"_reel_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';}} if(param=="social"){ for (var i=0; i<candid[nom]["social"].length; i++) {tabs=nom+"_social_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';}} if(param=="prive"){ for (var i=0; i<candid[nom]["prive"].length; i++) {tabs=nom+"_prive_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';}} if(param=="pro"){ for (var i=0; i<candid["candidat"]["pro"].length; i++) {tabs=nom+"_pro_"+[i]; document.getElementById(tabs).style.visibility='visible'; document.getElementById(tabs).style.display='block';}} }
Le problème :
bin c'est que ça marche bien sous firefox, j'ai aucune erreur.
mais sous IE et opéra(sa console donne un peu plus d'informations) j'ai une erreur suret
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (ii = 0;ii < candi[nom_tab]["reel"].length;ii++)sous opera et sous IE j'ai une erreur disant que à la ligne 63, 'reel' n'est pas un objet ou nul or la ligne 63 est avant les définitions des fonctions et le tableau existe vu que firefox le reconnait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part raz_cand(candid, nom);
Personnellement, je comprend pas une telle différence de résultat en les différen ts navigateurs et surtout je ne vois pas comment y remédier.
Si quelqu'un pouvait m'aider?...
Partager