Autor Zpráva
sslavo
Profil
Mam problem robim stranku ktora sa nezaobide bez rozbalovacieho menu a doteraz vsetko hladko fungovalo az som zmenil Mod prehliadaca z Quirk na standardni mod a prestalo fugovat poslem vam aj zdrojak aby ste boli v obraze

html

<a href="javascript:rozbal(xxx)">moznosti</a>
<div id="xxx" style="display:none;">
<a>1. moznost</a>
<a>2. moznost</a>
<a>3. moznost</a>
<a>4. moznost</a>
</div>

JS


function rozbal(id,nid)
{
if (id.style.display=='none'){
id.style.display='';
}
else
{
id.style.display='none';
}
}
pomozte prosim
Tomik
Profil
Mě to funguje, ale použil bych raději document.getElementByID.
sslavo
Profil
ale ked pouzijem document.getElementByID. mozem za to id do zatvorky dat aj argument funkcie?
sslavo
Profil
2 Tomik nemohol by si my poslat tvoj zdrojak lebo jak sa snazim tak sa snazim nefunguje mi to.
Vopred dik
Jay Jay
Profil
co třeba tohle :
<html>
<head>
<title></title>
<script>
function f(lol)
{
hm = document.getElementById(lol);
if(hm.style.display == "none")
hm.style.display = "block";
else
hm.style.display = "none";
}
</script>
<style>
</style>
</head>
<body>
<div onclick="f('xx1')">nabidka</div>
<div id="xx1" style="display:none;">
<a href="#">1. moznost</a><br />
<a href="#">2. moznost</a><br />
<a href="#">3. moznost</a><br />
<a href="#">4. moznost</a><br />
</div>
</body>
</html>
peta
Profil *
Jay Jay
Mas tam chybku :) U JS je nezbytne nutne deklarovat promenne pomoci var. Potom to v nekterych prohlizecich dela neplechu nebo treba mozilla to odmita spustit a hlasi na tom radku chybu.

function f(lol)
{
var o = document.getElementById('xx'+lol);
o.style.display = (o.style.display == "none")? "block" : "none";
}

<div onclick="f(1)">nabidka</div>
Jay Jay
Profil
peta :
"U JS je nezbytne nutne deklarovat promenne pomoci var."
Nezbytně nutné to rozhodně není ( myslím že existuje jedna výjimka :) ), jedná se prakticky pouze o dobrý programátorský zvyk :) Pokuď to v Mozille dělá neplechu, tak jsem spíš zastáncem toho, že to je díky špatné podpoře JS ze strany Mozilly.
Leo
Profil
"Nezbytně nutné to rozhodně není ( myslím že existuje jedna výjimka :) ), jedná se prakticky pouze o dobrý programátorský zvyk :) Pokuď to v Mozille dělá neplechu, tak jsem spíš zastáncem toho, že to je díky špatné podpoře JS ze strany Mozilly."

Pouzivat klicove slovo var je VELMI dobry programatorsky zvyk. Zkuste si treba tenhle kod v IE se zapnutym hlasenim chyb:

HTML

<p id="x">Text text...</p>

JS:

x = 5;

Skonci to chybou objekt tuto vlastnost nebo metodu nepodporuje, protoze ******* IE (a po nem se opici i ostatni prohlizece, Firefox nevyjimaje) automaticky vytvori globalni promennou x typu object odpovidajici tomu odstavci.

Takze

var x;

nebo primo

var x = 5;

panove :-)

Leo
peta
Profil *
Jay Jay Tak, delej, jak myslis, ale Mozilla ma jedn z nejlepsich podpor JS podobne jako IE (ktere teda vice nez technologii ma efekty).
Kdyz to nejede v mozille uz dopredu vim, ze v IE to nema smysl zkouset, kdo vi, co to udela.

Jay Jay
Leo
...jedná se prakticky pouze o dobrý programátorský zvyk :)
Pouzivat klicove slovo var je VELMI dobry programatorsky zvyk.

Zda se, ze kluci nezkouseli srovnavat rychlost narocnejsiho scriptu s var a bez var, ze?
Kdyz totiz musi uprostred scriptu zacit deklarovat promenne, a jeste jim priradit spravny typ, tak se to dost vyrazne zpomaly, U meho serazovaciho algoritmu to bylo dokonce az o 1/2 , nekde.
http://www.volny.cz/peter.mlich/sorting.htm
(tam si nejaky ten script upravte, ze smazete cast s var a pak uprostred forcyklu si to zacne deklarovat ty promenne...)
peta
Profil *
(meho rikam proto, ze to jiste lze napsat lepe, ale male deti si hrali a je to takto :) )
Leo
Profil
"Kdyz totiz musi uprostred scriptu zacit deklarovat promenne"

Proc bych to delal? Krome toho, rekl bych, ze osetreni problemu s automatickou deklaraci je podstatnejsi, nez rychlost. Radeji pomaleji, ale vubec. Leo
peta
Profil *
Leo
Ono nejde o rychlost, ale o to, ze automaticka deklarace muze zavest nepredvidatelne chyby, ktere se pak dost tezko dohledavaji. Prepisovat promenne, ktere prepsany byt nemeli a tak. Zazil jsem to v par scriptech na netu, kdy se script choval v kazdem prohlizeci jinak. On FF ma totiz take jistou automatickou deklaraci pro urcite funkce.
Leo
Profil
Tak ted uz nerozumim tomu, co chcete rict, jestli jsme ve pri nebo vepri. Leo
Jay Jay
Profil
peta
"Zda se, ze kluci nezkouseli srovnavat rychlost narocnejsiho scriptu s var a bez var, ze?
Kdyz totiz musi uprostred scriptu zacit deklarovat promenne, a jeste jim priradit spravny typ, tak se to dost vyrazne zpomaly, U meho serazovaciho algoritmu to bylo dokonce az o 1/2 , nekde."


To ale neznamená nezbytně nutné ;o)

Já měl za to, že se musí deklarovat pomocí var pouze v případě když chci použít stejně pojmenovanou proměnnou vně fce a zároveň globálně...
Leo
Profil
"Já měl za to, že se musí deklarovat pomocí var pouze v případě když chci použít stejně pojmenovanou proměnnou vně fce a zároveň globálně..."

Coz samo o sobe neni moc dobry napad. Ale pokud v deklaraci fce pouzijete var tak samozrejme globalni promennou stejneho jmena prerazite. Leo
peta
Profil *
Jay Jay Leo Takhle, delejte, jak myslite. Me zkusenosti mluvi, ze bez var ani carku v JS. Pak mi vznikaji nepredvidatelne problemy. Nehlede na to, ze mi obcas vyskoci undefined, ikdyz ta promenna existuje :)
Leo
Profil
"Me zkusenosti mluvi, ze bez var ani carku v JS."

Boze boze, a co ja celou tu dobu tvrdim... Zkuste si precist me prispevky, treba ten, kde pisu

"Pouzivat klicove slovo var je VELMI dobry programatorsky zvyk."

Leo
Chamurappi
Profil
Reaguji na petu:
Zda se, ze kluci nezkouseli srovnavat rychlost narocnejsiho scriptu s var a bez var, ze?
Zdá se, že kluk chce srovnávat nesrovnatelné.

Použiješ-li var, vytváříš novou proměnnou. Nepoužiješ-li var, užíváš existující proměnnou. Časový rozdíl je mezi vytvořením proměnné a jejím užitím, ne mezi použitím var a nepoužitím var. Abys mohl rozdíl měřit, musíš opakovat nějaký úkon, v tvém případě třídění. Vytváříš-li proměnnou v každém průchodu, je to pomalejší, než když používáš proměnnou, kterou sis vytvořil dříve. A je úplně jedno, jestli jí vytváříš přes var nebo ne. Tvůj test tudíž o ničem nevypovídá.

a jeste jim priradit spravny typ
Pokud vím, tak typ se v JavaScriptu přiřazuje až při přiřazení hodnoty, nikoliv při deklaraci.
Leo
Profil
"Pokud vím, tak typ se v JavaScriptu přiřazuje až při přiřazení hodnoty, nikoliv při deklaraci."

V podstate ano. Pri deklaraci bez prirazeni hodnoty ma datovy typ undefined i hodnotu undefined. Leo
peta
Profil *
Chamurappi
V podstate, kdyz neni promenna vytvorena pres var, tak se snazi dohledat ve vsech promennych, od konce seznamu proennych. A protoze ji nenajde, musi pro ni alokovat pamet (coz je podle mne dost problematicka akce na cas) a pak ji musi jeste prizpusobit obsahu dat (kde alokuje dalsi pamet).
Vse se da urychlit, kdyz zadat
var i=0;
for (i=0;i<neco;i++)
v druhem radku si porovna typy, zjisti, ze jsou stejne, nic navic alokovat nemusi a cely script dostane uplne jiny smysl.
Zrovna teda u FOR to nema velky smysl, tam se dela var 1x, ale u toho trizeni mam jine scripty, kde treba pracuji s polem a kdyz neni dopredu jasne ajky ma pole rozmer a pod, tak je to dost zajimave.
... Teda takhle si myslim, ze to probiha

?je promenna v seznamu
-> pridej / vrat 1
hodnota = string
?ma stejny typ a rozmer
-> zmen typ + zmen pamet / vrat 1
-> napln pamet hodnotou

Seznam promennych: a.b.n.c.d.f (se prohledava podle posledni promenne, cize od zadu) a kdyz se musi projit cely, tak to neni na rychlost nejlepsi. A kdyz se musi projit pokazde cely, protoze IE a bez var, tak je to primo uzasne :) (protoze se domnivam, ze IE je natolik hloupe, ze si bez var deklaruje fiktivni promennou, kterou nezapise do tabulky, ale nekde vedle a pak si ji deklaruje pokazde znova)
Leo
Profil
Samozrejme, ze pokud mate moznost mel byste dat prednost lokalnim promennym pres globalnimi, ale ja puvodne psal o deklaraci (pres var) u GLOBALNICH promenych. Jinak o optimalizaci JS na rychlost viz napriklad Zrychlete sve webove stranky od Andrew B. King, Zoner Press, kap. 10. Leo
Toto téma je uzamčeno. Odpověď nelze zaslat.

0