Autor Zpráva
Question
Profil *
Dobre, povedal som si, že kašlem na to, asi na to sám neprídem... takže plís pomôžte mi ak budete vedieť :-) ... snažím sa spraviť nové menu a je tu jeden problém so scriptom, ktorý skrýva podmenu.

Na stránke www.biowebgym.szm.sk/NEWMENU/ sú 3 "pracovné" súbory (menu.htm, script.js, style.css). Tu vypíšem len podstatnú časť kódu v ktorom je problém (poznámky priamo v kóde sú uvedené "// text..." - toto samozrejme v samotnom kóde neni):

MENU.HTM (časť):

<html>
<head>
...
<script language="Javascript" type="text/javascript" src="script.js"> // skript 3
</script>
</head>

<body>

<script language="JavaScript" type="text/javascript"> // skript 2
<!--
if (document.all){
document.write("<div id='topie'>");
}
else {
document.write("<div id='topnet'>");
}
//-->
</script>
<noscript>
<div id="topie">
</noscript>
<div id="menu">
...
<script language="JavaScript" type="text/javascript"> // skript 3
<!--
document.write("<br>" + copyright);
//-->
</script>
...
</body>
</html>


SCRIPT.JS (celý):

copyright="&copy; 2003-2005";

function VytvorPole(pocet)
{
this.length=pocet;
for (x=1; x<=pocet; x++)
this[x]=false;
return(this);
}

function UkazPodmenu(index)
{
for (x=1; x<=PocetUrovni; x++){
if (x==index){
podmenu[x]=!podmenu[x];
}else{
podmenu[x]=false;
}

if (podmenu[x]){
menu[x].style.display ='';
}else{
menu[x].style.display ='none';
}
}
}

PocetUrovni=8;

podmenu=new VytvorPole(PocetUrovni);
menu=new VytvorPole(PocetUrovni);

menu[1]=M1;
menu[2]=M2;
menu[3]=M3;
menu[4]=M4;
menu[5]=M5;
menu[6]=M6;
menu[7]=M7;
menu[8]=M8;

UkazPodmenu(100);

STYLE.CSS:

/* myslím že kód nie je dôležitý, resp. neviem z neho vybrať časť, ktorá by bola dôležitá, takže ak si myslíte, že môže byť problém tu, tak si otvorte kód www.biowebgym.szm.sk/NEWMENU/style.css. */


Pritom v menu.htm sa podmenu otvára tak, že odkaz má napr. href="javascript:UkazPodmenu(1)" a tabuľka za odkazom je označená napr. id="M1".

Časť kódu menu.htm, napr.:

...
<td><a href="javascript:UkazPodmenu(1)">Systém živej prírody</a>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="90%" class="menu2" id="M1">
<tr>
...

------------------------------------------------------------

No a teraz... ak je všetko napísané tak, ako tu uvádzam tak sú tie podmenu, ktoré majú byť za normálnych okolností skryté (až kým sa neklikne na odkaz) všetky "odkryté" a IE vypisuje chybu:

'menu[...].style' is null or not an object

Veľmi zaujímavé :-) je pritom, že keď do // skriptu 3 v menu.htm doplním src="script.js", tak podmenu fungujú normálne, ale zasa sa nevypisuje premenná copyright (pod e-adresou sa nezobrazí nič a malo by tam byť "&copy; 2003-2005") a skript hlási chybu:

'M1' is undefined

...ale podmenu napriek tomu fičia úplne v poriadku, nevypisuje sa len premenná copyright čo je fakt už na mňa priveľa :-)

Tým, že som src="script.js" striedavo priraďoval do // skriptu 1,2 aj 3 všetkými možnými kombináciami, nikdy nefungovali naraz obidve veci (podmenu a copyright). Fakt neviem v čom je problém... akoby ten blbec nechápal že existuje súbor script.js kde sú všetky tie premenné zapísané. Fakt neviem...

Vyriešil som to asi tak, že som na úplný koniec menu.htm pridal:
<script language="Javascript" type="text/javascript" src="script.js">
</script>
... a potom to už tuším fičalo normálne... ale chcel by som aspoň vysvetlenie že PREČO ???? :-)


Podotázky:
1. je nutné dávať do hrefu pri odkazovaní na funkciu to "javascript:" ???
(podpodotázka: má to niečo s tým language="javascript" a treba vôbec to language=... do scriptov písať ???)
2. je veľký rozdiel medzi definovaním premennej s 'var' a bez 'var' ???
3. v tom script.js je veľmi dôležité poradie riadkov, myslím teda na to, či je dôležité, či tie veci od riadku PocetUrovni=8; po UkazPodmenu(100) sú na konci alebo povedzme pred function VytvorPole(pocet) ???


Ďakujem vopred každému kto si toto neľahké čítanie prečíta a zareaguje :-) kiež by som prišiel s niečim jednoduchším... :-)
Dík
Fred
Profil
Ani se nedivím, že nikdo neodpověděl, nedá se v tom orientovat. Doporučuji vykašlat se na to, ten použitý javascript je nevhodný. Přečti si tohle http://www.onlinetools.org/articles/unobtrusivejavascript/ tam se dozvíš proč. Trochu jsem na webu hledal show/hide nebo expand/collapse a nenašel jsem nic použitelného . Nejlepší mi připadá Pixyho řešení http://www.pixy.cz/pixylophone/2004_03_archiv.html#1079700003 Tady http://xy.wz.cz/sh/ je trochu předělaný, tak aby to vyhovovalo postupům v tom prvním odkazu. Řekl bych, že ten článek je téměř takový dogma pro javascript jako je Pixyho http://www.pixy.cz/dogma/dogmaw41/cs/ pro tvorbu stránek
Question
Profil *
Díky za reakciu a tipy, pozrem tie stránky. Na ten skript sa zrejme vykašlem lebo vlastne mu ani poriadne nerozumiem a zdá sa mi príliš komplikovaný na takú pomerne jednoduchú vec (neviem, možno zabezpečiť, aby také niečo fungovalo je ťažšie ako si myslím, neviem). Anyway...

Inak tá stránka o Dogme W4 sa mi veľmi hodí, v podstate som také nejake zaužívané pravidlá hľadal už dlhší čas ale nič širšieho som nenašiel. Ešte raz dík za tipy...
Fred
Profil
Na Intervalu ve fóru tady se objevilo pěkné řešení Centiho :-) http://www.centi.local.sk/ukazky/javascript/navigacia/rozbalovacie_odr azkove_menu/
Anonymní
Profil *
[/pre]

[pre]

[/pre]

[pre]
[img][/img][img][/img][img][/img][img][/img][img][/img][img][/im g]Text odkazuText odkazuText odkazu[/b][b][b][/b]
Toto téma je uzamčeno. Odpověď nelze zaslat.