Pročpak nefunguje tedle JS?

function skryj(scislo) {
window.setTimeout("document.getElementById('menu' + scislo).style.visibility='hidden';",100);}

- někde okolo toho timeoutu bude něco špatně,,, něž jsem ho tam přidal, všechno šlapalo (jako na stránkách..)
Zrejme chceš, aby sa premenná scislo vyhodnotila hneď, takže by sa nemala nachádzať v reťazci:

function skryj(scislo) {
window.setTimeout("document.getElementById('menu'" + scislo + ").style.visibility='hidden';",100);}

alebo

function skryj (scislo)
{
window.setTimeout (function () {document.getElementById ('menu' + scislo).style.visibility = 'hidden';}, 100);
}
window.setTimeout("document.getElementById(\"menu" + scislo +"\").style.visibility='hidden';",100);
takhle nejak by to melo fachat.

vlastne je to ale blbost, protoze kdykoliv se spusti akce onmouseout (v ty opere, kdyz najizdis na to menu), tak obdelnik stejne zmizi, akorat s casovym odstupem. Chtelo by to tam dat jeste nejakou kontrolu, jestli po tech 100ms platí onmouseover......
sakra, zase pozde ;)
Pozde, ale aspoň to Tvoje funguje - ja tam mám jeden apostrof blbo umiestnený. Malo to byť takto:
function skryj(scislo) {
window.setTimeout("document.getElementById('menu" + scislo + "').style.visibility='hidden';",100);}
2 donny: myslim, že ne... když dám po najetí na prvek přerušení timoutu, tak to pudu

- jinak to odskoušim ;)
tak to funguje jak napsal donny, i jak se opravil los...
- jenom nevim proč to tak funguje :-/ ... vysvětlete, pls.

jinak mam dotaz: může fce obsahovat fci? (tak aby po zavolání vrchní fce se vykonala i ta menšií)?
muze.muze obsahovat cokoliv,co dany jazyk dovoli (ze sytnaktickeho a logickeho hlediska).Funkce muze volat i sama sebe - rika se tomu rekurze.
Prečo to funguje? Pretože do window.setTimeout posielaš reťazec, z ktorého sa vytvorí funkcia. Keď je scislo=5 a reťazec vyzerá takto:
"document.getElementById('menu" + scislo + "').style.visibility='hidden';" výsledný reťazec bude vyzerať
"document.getElementById('menu5').style.visibility='hidden';"

To, čo si mal na začiatku:
"document.getElementById('menu' + scislo).style.visibility='hidden';"
sa vyhodnotilo ako:
"document.getElementById('menu' + scislo).style.visibility='hidden';"
Nič sa nenahradilo, lebo scislo bolo v reťazci. Pri volaní už táto funkcia nepoznala premennú scislo, pretože sa volá z iného kontextu ako bola definovaná.

Podľa mňa je najjednoduchšie vytvárať si v takomto prípade anonymné funkcie:
function skryj (scislo)
{
window.setTimeout (function () {document.getElementById ('menu' + scislo).style.visibility = 'hidden';}, 100);
}
Len si treba dávať pozor na spôsob, akým sa v JavaScripte naviažu premenné (viac Google: JavaScript closures). Premená scislo sa naviaže danú premennú v aktuálnom kontexte a keď ju potom zmeníš, táto zmena bude viditeľná aj pri volaní funkcie:
var i = 1;
window.setTimeout (function () {alert(i);}, 100);
i = i + 1;
(zobrazí sa hodnota 2).

Funkcia môže obsahovať ďalšiu funkciu, ale aby sa vykonala, musíš ju zavolať. Funkcie si môžeš odkladať aj do premenných.
takže by to bylo takto:

function prvni() {
function druha(){
kód;}
druha();
}


?
Keby si to vyskúšal, zistil by si, že to tak funguje.
Dá sa použiť aj iný spôsob:
function prvni ()
{
var f = function (x) {alert (x)};
f('skuska');
}

alebo (síce neviem, kde by sa dal takýto zápis využiť):
function prvni ()
{
(function (x) {alert (x)}) ('skuska');
}
pockejte,neco me napadlo... vyzkousim to a ozvu se...
uz to mam. To s tim prerusenim casovace je skvelej napad... Malinko jsem to poupravil - predvedu na prvni polozce menu:

JS:
function zobraz(zcislo) {
document.getElementById('menu' + zcislo).style.visibility='visible';
window.clearTimeout(casovac);
}

function skryj(scislo) {
casovac = window.setTimeout("document.getElementById(\"menu" + scislo +"\").style.visibility='hidden';",500);
}

HTML:
DIV class="odkaz-hlavni" onmouseout="zobraz(1)" onmouseover="skryj(1)"
-- IMG obrazek v menu... /
-- DIV id="menu1" class="tarantino"
-- -- A polozka menu /A
-- -- A class="hr" polozka menu /A
-- -- A polozka menu /A
-- /DIV
/DIV

CSS:
.odkaz-hlavni {width: 110px;}
.odkaz-hlavni a {width: 100%;}
.odkaz-hlavni a.hr {border-bottom: 7px solid #FFc522;} // padding blbnul v IE
.tarantino {width: 118px;
background-color: #FFC522;
padding: 10px 2px 10px 2px;
position: absolute;
top: 99px;
left: 10px;
border: 2px solid black;
width: 110px;
visibility: hidden;}
.tarantino a {display: block;width:100%;}
.tarantino a:hover {background: #FF7F2A;color:#EEEEEE;}

mam to odzkouseny a melo by to fungovat...
nebude to fungovat... ten skript teď řešim s někym na builder.cz ;-) už jsem skoro u konce... já přišel na ten samej kód jako ty, ale je tam chyba ->
když přejedeš z jednoho menu rovnou na druhý, tak se stane to, že se to první neskryje, protože vypneš veškrý časování... zatim ten skript vypadá takto,(ale je zatím nefunkční, ve finále bude podobnej):

<SCRIPT type="text/javascript">
var zcislo;
var scislo;
var cas = [];

function zobraz(zcislo) {
document.getElementById('menu' + zcislo).style.visibility='visible';
clearTimeout(cas [zcislo]);}

function skryj(scislo) {
cas [scislo] = window.setTimeout("document.getElementById(\"menu" + scislo +"\").style.visibility='hidden';",500);}
</SCRIPT>


- jinak ještě sem nepochopil 2 věci co se v Opeře týče -> proč se zobrazuje ten hover toho obrázku (nadpis sekce) tam nahoře nad nim,, a za 2) nevm, proč sou odkazy v Opeře v jednotlivejch podmenu širší než div okolo, dělá to jenom opera,,, možná to podle kódu, kerej si napsal funguje, ale já to z toho nevyčtu :-/
>když přejedeš z jednoho menu rovnou na druhý, tak se stane to, že se to první neskryje, protože vypneš veškrý časování...

v tom pripade staci upravit ty JS:

function zobraz(zcislo) {
document.getElementById('menu' + zcislo).style.visibility='visible';
window.clearTimeout(casovac[zcislo]);
}

function skryj(scislo) {
casovac[cislo] = window.setTimeout("document.getElementById(\"menu" + scislo +"\").style.visibility='hidden';",500);
}

Tim bude mit kazda polozka v menu svuj casovac.

Tam, co jsem napsal, jsem to opravil. Asi je problem, ze pouziva jinej box-model.Stacilo k sirce pricist okraje a velikost borderu a vse je ok. a koukal sem na to v exploreru a vypada to dobre.
casovac[cislo] = window.setTimeout("document.getElementById(\"menu" + scislo +"\").style.visibility='hidden';",500);

-- todle se mi nezdá, není tam někde chyba?
-- ta proměnná cislo tam nesedí..
jj ,preklep. samozrejme tam ma bejt [scislo] - ma to bejt ta promenna z parametru fce.
mam porád ten skript

<SCRIPT type="text/javascript">
var zcislo;
var scislo;
var cas = [];

function zobraz(zcislo) {
document.getElementById('menu' + zcislo).style.visibility='visible';
window.clearTimeout(cas[zcislo]);}

function skryj(scislo) {
cas[scislo] = window.setTimeout("document.getElementById(\"menu" + scislo +"\").style.visibility='hidden';",500);}
</SCRIPT>


a porád to nefunguje... je to totéž co jsi napsal ty (donny), ale nepřeruší to ten Timeout...
ja uz fakt nevim, JS neni zrovna moje parketa...
myslim, že dnes večer už to budu vědět, tak sem napíšu ;)
jj to napis, vzdycky se to hodi...
hehe, tak už to mam.. udělaný to je nakonec o dost jináč... je to tak, že je nastavenej timout na 5.100 , tedy 500 ms (díky jedný proměný to mam jakoby x.100).. a ten timeout se aktivuje když vyjedeš z menu a taky když na něm zůstaneš stát. mrkni na to, mám to na stránkách..

kód:

<SCRIPT type="text/javascript">
var zcislo;
var scislo;
var menu = new Array;
menu [1] = -1;
menu [2] = -1;
menu [3] = -1;
menu [4] = -1;
menu [5] = -1;


function zobraz(zcislo) {
document.getElementById('menu' + zcislo).style.visibility='visible';
if (menu [zcislo] == -1) {
window.setTimeout('skryj(' + zcislo + ')', 100);
}
menu [zcislo] = 5;
}



function skryj(scislo) {
if (menu [scislo] <= 0) {
window.setTimeout("document.getElementById(\"menu" + scislo +"\").style.visibility='hidden';",500);
}
else {
window.setTimeout('skryj(' + scislo + ')', 100);
}
menu [scislo] -= 1;
}

</SCRIPT>
ještě jsem zapomněl, že se volá pouze onmouseover="zobraz(1)" a onmouseout se nevolá.