Autor Zpráva
Číňan
Profil *
Mám problém se stránkou, dělám víceúovňové rozklikávací menu(JS) a stránky mam ve dvousloupcovém layputu(CSS). Kyž dam DTD na strict, tak mi krásně sedí layout, ale nefunguje menu. Naopak když dám DTD na Transitional tak mi to menu funguje, ale zase se mi rozhodí layout.
Tenhle problém je jenom v mozille.


menu.js
function skryj(co) {

co.style.display = "none";
}
function odkryjSubmenu(kde) {
if(kde.style.display == "none") {
kde.style.display = "block";
} else {
kde.style.display = "none";
}
}



index.php
<ul>

<li><a href="javascript: odkryjSubmenu(sub1);">Menu1</a></li>
<ul style="display: block;" id="sub1">
<li>Submenu1</li>
<li>Submenu2</li>
</ul>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
<li><a href="#">odkaz</a></li>
</ul>


Ten CSS layout je stejný jako tady
habendorf
Profil
Číňan

Problém je v HTML, konkrétně v zanoření submenu.

Správně:

<ul>
<li><a href="javascript: odkryjSubmenu(sub1);">Menu1</a>
<ul style="display: block;" id="sub1">
<li>Submenu1</li>
<li>Submenu2</li>
</ul>
</li>
<li><a href="#">odkaz</a></li>
.
.
.
Chamurappi
Profil
Reaguji na Číňana:
Rozdíl je ve vykreslovacím režimu — Mozilla v quirku podporuje globální reference elementů na objektu window (tzn. window.něco zaměří <element id="něco">), ve standardním režimu je zapotřebí užít metodu document.getElementById("něco").

Na tvém místě bych řešil menu jinak:
<menu>

<li><a href="smysluplna-adresa.html">Menu1</a>
<ul>
<li>Submenu1
<li>Submenu2
</ul>
<li><a href="#">odkaz</a>
<ul>
<li>Třeba jiné submenu…
</ul>
<li><a href="#">odkaz</a>
</menu>
Externí šílený skript:
onload = function()

{
var li, i;
for(var menu = document.getElementsByTagName("menu"), j = 0; j < menu.length; j++)
{
i = (li = menu[j].getElementsByTagName("li")).length - 1;
while(i--)
li[i].getElementsByTagName("ul")[0]
&& (li[i].className = "zabalit")
&& (li[i].getElementsByTagName("a")[0].onclick = function()
{
return (this.parentNode.className = this.parentNode.className ? "" : "zabalit"), false;
})
}
}
Styl:
li.zabalit ul { display: none }
Číňan
Profil *
Reaguji na Chamurappi
Tak to poslední s tim "šíleným scriptem" funguje jenom v Opeře
Chamurappi
Profil
Reaguji na Číňana:
Ukaž.
Číňan
Profil *
Tak beru zpátky, funguje !
Dík, sice ten JS kód absolutně nechápu, ale to je jedno.
Číňan
Profil *
tak beru zase zpátky, ten script mi v mozille zafungoval jednou a už se mu zase nechce (OPERA i IE: OK)
Číňan
Profil *
Ježiš já jsem vůl, jsem v mozille zkoušel jak to menu vypadá s vyplym JS a pak jsem ho zapoměl zapnout.
Takže sorry, menu jede.
Ashiad
Profil *
Zdravím

Reaguji na Chamurappi:

děkuji za jednoduchý návod :). Mám ale dotaz: Když použiji přesně tvůj kód se strukturou jakou tam máš, šlo by nějak jednutuše v JS upravit aby se při otevření dalšího submenu to předešlé zase zavřelo? a nemuselo klikat znova na odkaz?

Našel jsem už kódy kde je to vyřešené, ale buď jsou dělané na více úrovní a nebo to vůbec není k pochopení. V JS neumím (maximálně jsem schopnej pozměnit pár věcí - aby se to chytalo jiných tagů nebo pracovalo s jinými proměnými.

Pokud víš o nějakém odkazu který by mi pomohl nebo rovnou o kódu, prosím přilep ho sem, díky.

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: