Autor Zpráva
ybznek
Profil
<body>
<script>
var i=1
styl();
function styl(){
if (i<100){
i+=5;

document.getElementById('popis').style.backgroundColor='blue';
if (i>100)i=100;
document.getElementById('popis').style.width=i+"%";
document.getElementById('popis').style.height=i+"%";
if (i<100)
setTimeout("styl()",1); 
}}
</script>
</head>
<body>
<span style="position:absolute; left:0; top:0;" id="popis">a</span>
</body>



Ahoj tento kód jsem zkoušel nějak napsat dobře a nešlo mi to to. Chtěl bych vás poprosit o to, abyste mi našli chybu. Bude to něco s tím document.getElementById('popis').
Joker
Profil
Prvek "popis" v okamžiku vykonávání skriptu neexistuje.

edit:
Druhá věc, že ani samotná funkce styl() v okamžiku svého volání (ještě) neexistuje.
Chamurappi
Profil
Reaguji na Jokera:
ani samotná funkce styl() v okamžiku svého volání (ještě) neexistuje
Je to sice zvláštní, ale existuje. Viz mé srpnové zjištění.
ybznek
Profil
Joker
Jo díky. Hledal jsem chybu v něčem jiném :-(
los
Profil *
> Je to sice zvláštní, ale existuje.
Zvláštne by bolo, keby neexistovala.
peta
Profil
los
Mno, mne to prijde zvlastni, ze existuje. Protoze kdyz das script pred element, tak vypise chybu, ze element neexistuje.
Nezkousel jsem to, mozna se bude chovat jiny prohlizec k takove konstrukci jinak. V IE bych pocital s existenci.
Joker
Profil
los
Zvláštne by bolo, keby neexistovala.
Mně teda přijde hodně zvláštní její existence, neexistence by mi přišla normální.
Alespoň jsem měl za to, že skript se vykonává sekvenčně. Zdá se, že to tak úplně není.
centi
Profil
Skript (jeden <script> blok, alebo jeden <script src=""> súbor) sa vykonáva dvoj-krokovo.

V prvom kroku si browser načíta všetky deklarované funkcie do pamäte, a až v druhom kroku vykonáva postupne inštrukcie uvedené v skripte. V druhom kroku už teda sú funkcie dostupné, bez ohľadu na to, kde v danom script bloku boli definované.

Toto neplatí v prípade, že máme funkcie definované týmto spôsobom:

var fn = function() {
...
};
los
Profil *
Na to, či je povolené používať funkciu, ktorá predtým nebola deklarovaná, neexistuje univerzálne pravidlo, ale je to definované v špecifikácii jazyka.

Keď sa v JavaScripte použije pomenovaná funkcia, je to ako keby sa deklarovala nová lokálna premenná s jej názvom (až na to, že to nie je premenná, ale funkcia).
Rozsah platnosti premennej je daný funkciou, v ktorej je deklarovaná (prípadne globálnym objektom, ak nie je tá premenná deklarovaná v žiadnej funkcii).

Takže keď deklarujeme funkciu neskôr, ale stále v rámci aktuálneho rozsahu platnosti, tak ju môžeme používať.

Ak by to bolo tak, že premenná platí až po jej deklarovaní, tak by volanie funkcie "a" v nasledujúcom príklade vypísalo 3. Keďže je ale rozsah platnosti definovaný trochu inak, tak aj výsledok je trochu iný:
var i = 3;
function a() { alert(i); var i; }
Chamurappi
Profil
Reaguji na losa a centi:
Jasně, takhle to být musí, ale stejně mi to připadá zvláštní.
Teď se zkuste mrknout na můj oblíbený oříšek s with.

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:

0