Pročpak nefunguje tedle JS?
23 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
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á.