Autor Zpráva
Honza 78
Profil *
Ahoj,

nevíte o nějakém rychle nastavitelném stromovém menu v javascriptu? Ideální by bylo menu řešené ajaxem. Tedy, že po rozkliknutí větve se mi v pozadí načte php skript a vrátí do menu podvětve.

Díky
peta
Profil
Honza 78
'kde sehnat hotové řešení' - google.com, css.interval.cz ,...

Muzes zkusit pouzit tohle, ale pripominky neresim :)

<html>
<head>

<style>
#nav a {color:#0088cc;}
#nav a.a_otevren,
#nav a.a_zavren {font-weight:bold; text-decoration:none;}
#nav a.a_otevren {color:#00bb00;}
#nav a.a_zavren {color:#ff0000;}
#nav ul.ul_otevren {}
#nav ul.ul_zavren {display:none;}
</style>

<script>
// hleda prime potomky, narozdil od getElementsByTagName
function objekt_deti(objekt,jmeno)
{
var i,j,pole,deti;
j = 0;
pole = [];
deti = objekt.childNodes;
if (deti && deti.length>0)
{
for (i=0;i<deti.length;i++)
{
el = deti[i];
if (el.nodeType==1 && el.tagName==jmeno)
{
pole[j] = el;
j++;
}
}
}
return pole;
}

function nav_zavri(obj_A,obj_UL,podminka)
{
var a,b;
if (obj_UL)
{
// zmen class pro A
a = 'a_otevren';
b = 'a_zavren';
obj_A.className = podminka ? b : a;
// zmen class pro UL
a = 'ul_otevren';
b = 'ul_zavren';
obj_UL.className = podminka ? b : a;
}
}

// akce pri onclick
function nav_akce(obj_A)
{
var a,b,i,o1,o2,o3, podminka;
podminka = obj_A.className=='a_otevren';
o1 = objekt_deti(obj_A.parentNode,'UL'); // z A do rodice, tj. LI a ziskat vsechny UL
if (o1.length>0)
{
// zavri vsechny vetve
o2 = objekt_deti(obj_A.parentNode.parentNode,'LI'); // z A do LI a do UL a ziskat vsechny LI uzly
for (i=0;i<o2.length;i++)
{
o3 = objekt_deti(o2[i],'UL');
if (o3.length>0)
{
// zmen class pro UL cislo 0
nav_zavri(objekt_deti(o2[i],'A')[0], o3[0], true);
}
}
// zmen class A i UL
nav_zavri(obj_A, o1[0], podminka);
return false;
}
return true;
}

function nav_pridej(o1)
{
var o2, i,j; // o1, o2 jsou pole objektu
if (o1.length>0)
{
for (i=0;i<o1.length;i++)
{
// nastav pro vsechny A class a onclick, ktere maji ve stejnem LI aspon 1 UL
o2 = objekt_deti(o1[i],'A');
for (j=0;j<o2.length;j++)
{
if (objekt_deti(o1[i],'UL').length>0)
{
o2[j].className = 'a_zavren';
o2[j].onclick = new Function ('return nav_akce(this)');
}
}
// nastav pro vsechny UL class a spus opakovani funkce pro dalsi prime potomky
o2 = objekt_deti(o1[i],'UL');
if (o2.length>0)
{
for (j=0;j<o2.length;j++)
{
o2[j].className = 'ul_zavren';
nav_pridej(objekt_deti(o2[j],'LI')); // opakuj sam sebe pro vsechy dalsi LI
}
}
}
}
}

function nav_vytvor(id)
{
nav_pridej(objekt_deti(objekt_deti(document.getElementById(id),'UL')[0 ],'LI'));
}
</script>
</head>

<body>
<div id="nav">
<ul>
<li><a href="#">nadpis</a>
<ul>
<li><a href="#">odkaz</a></li>
<li><a href="#">nadpis</a>
<ul>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
</ul>
</li>
<li><a href="#">nadpis</a>
<ul>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
</ul>
</li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
</ul>
</li>
<li><a href="#">nadpis</a>
<ul>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
</ul>
</li>
<li><a href="#">nadpis</a>
<ul>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
</ul>
</li>
</ul>
</div>

<script>nav_vytvor('nav');</script>

</body>
</html>
Arnold
Profil *
Dooost dobrééé
svadla
Profil
treba
http://jquery.bassistance.de/treeview/demo/
peca9
Profil
Menu mám v souboru index.php a odkazy spouští tentýž index.php přičemž posílám hodnotu proměnné v adrese a tato proměnná následně určuje obsah jiné části této stránky.
<li><a href="index.php?prodid=00001">vyrobek00001</a></li>
Po kliknutí na odkaz se načte stránka tak jak potřebuju, ale zárověň se zruší rozbalení menu.
Poraďte mi prosím jestli existuje způsob jak rozbalení zachovat.
Děkuji, jsem zoufalý a nezkušený.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: