11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour
Pour des raisons de charge réseau j'ai besoin d'élaguer au maximum les pages d'un site intranet que j'anime. J'ai créé un menu horizontal javascript multi-niveaux et donc pour alléger le code je voudrai regrouper les 2 Fct (pop1 et pop2) en une seule pop(n) comme ci-dessous mais voilà je butte.


var nava = (document.layers);
var dom  = (document.getElementById);
var iex  = (document.all);

if      (nava) { skn1 = document.topdeck1;
                 skn2 = document.topdeck2;}
else if (dom ) { skn1 = document.getElementById("topdeck1").style;
                 skn2 = document.getElementById("topdeck2").style;}
else if (iex ) { skn1 = topdeck1.style;
                 skn2 = topdeck2.style;}
skn1.top = posYmenu+offsetY;
skn1.visibility="hidden";
skn2.top = posYmenu+offsetY;
skn2.visibility="hidden";

//affichage du menu 1er niveau******
function pop1()
  {skn1.visibility="hidden";
   skn1.left=posXmenu+offsetX+pos1;
   if (nava)
       {skn1.document.write(content);
        skn1.document.close();}
     else if (dom)
       {document.getElementById("topdeck1").innerHTML = content;}
     else if (iex)
       {document.all("topdeck1").innerHTML = content;}
   skn1.visibility = "visible";
   }

//affichage du menu 2ème niveau******
function pop2()
  {skn2.visibility="hidden";
   skn2.left=posXmenu+offsetX+pos1+120
   skn2.top = posYmenu+offsetY+pos2;
   if (nava)
       {skn2.document.write(content);
        skn2.document.close();}
     else if (dom)
       {document.getElementById("topdeck2").innerHTML = content;}
     else if (iex)
       {document.all("topdeck2").innerHTML = content;}
   skn2.visibility = "visible";
   }

//affichage du menu niveau n******
function pop(n)
  {with('skn'+n)
        {
//        .visibility="hidden";
//        .left=posXmenu+offsetX+pos1;
//        if (nava)
//            {.document.write(content);
//             .document.close();}
//          else if (dom)
//            {document.getElementById("topdeck1").innerHTML = content;}
//          else if (iex)
//            {document.all("topdeck1").innerHTML = content;}
//        .visibility = "visible";
        }
   }


Le survol d'un item de la barre de menu crée tableau contenant le premier niveau affiché via skn1. Idem pour le sous-menu un second tableau sera affiché via skn2.
Merci de votre aide
Modifié par bill (15 Aug 2006 - 19:33)
Attention avec les tableaux, ils ne sont pas faits pour accueilir des menus.

Pour ton problème, j'imagine que c'est un problème d'accès aux variables skn1 et 2 en fonction de ton autre variable n.
Si c'est ça, la notation à adopter pour utiliser une variable en fonction d'une autre variable est la suivante :
window['skn']+n]
Merci pour le tuyau, ça marche nickel
Bien qu'ils ne soient pas fait pour ça, il est possible avec quelques lignes de code de créer des menus legers multi-niveaux et reconfigurables à souhait en chargeant les items dans des champs cachés.