Autor Zpráva
xlifer
Profil
<div id="pole"></div>

akce = setInterval("pocitej(1);", 3000);

function pocitej(cislo)
{
document.getElementById("pole").innerHTML = "cislo: " + cislo;
cislo = cislo + 1;
}


Jak zajistit aby se v rámci načasované funkci navyšovala hodnota cislo?

Díky.
Tori
Profil
tak, že proměnnou cislo nepoužijete jako parametr, ale deklarujete ji jako globální.
TomasJ
Profil
Reaguji na xlifer:
a nebo:
akce = setTimeout("pocitej(1)",3000);
function pocitej(cislo)
{
document.getElementById("pole").innerHTML = "cislo: " + cislo;
cislo++;
setTimeout("pocitej("+cislo+")",3000);
}

To funguje tak že var akce spustí za 3 sekundy funkci pocitej(1) ale jen jednou a pak už se spouští z funkce samotné, s číslem vyšším +1 (cislo++;) a nebo pak jak říká Tori, vytvoříte var akce... ; a pod tím var cislo;
Potom můžete nechat tu Vaši funkci se setInterval, ale doporučuji změnit cislo = cislo+1; na cislo++;
Má to stejnou funkci ale je to přehlednější a kratší ;-)
_es
Profil
TomasJ:
Ten tvoj kód nie je dobrý.
Nielen, že ponecháva nevhodné použitie setInterval, ale ešte aj bezdôvodne vytvára rekurzívne volanie funkcie.
<div id="pole"></div>
<script>
var pole = document.getElementById("pole"), cislo = 1, akce = setInterval(pocitej, 3000);
function pocitej(){ pole.innerHTML = "cislo: " + cislo++; }
</script>
xlifer
Profil
_es:

OK, díky, tvůj kód je funkční.

Upravil jsem takto a šlape dobře!

<div id="pole"></div>
<script>
var pole = document.getElementById("pole");
cislo = 1;
akce = setInterval(pocitej, 5000);
function pocitej()
{
if (cislo>5) {cislo = 1;};
document.getElementById("pole").innerHTML = "cislo: " + cislo++;
}
</script>
_es
Profil
xlifer:
Prečo nedefinuješ premenné cislo a akce? Viď tu.
xlifer
Profil
_es:

Díky za upozornění, nevědel jsem, že to má až tak velký význam, když to funguje i bez var.
Takže takto je vše ok?

<div id="pole"></div>
<script>
var pole = document.getElementById("pole");
var cislo = 1;
var akce = setInterval(pocitej, 5000);
function pocitej()
{
if (cislo>5) {var cislo = 1;};
document.getElementById("pole").innerHTML = "cislo: " + cislo++;
}
</script>
panther
Profil
xlifer:
Takže takto je vše ok?
můžu se zeptat, proč definuješ proměnnou „pole“, když s ní pak nikde dál nepracuješ?
Chamurappi
Profil
Reaguji na xlifera:
Takže takto je vše ok?
Není. Řekl bych, že uvedený kód nemůže fungovat.
Neměl by ses tady teď ptát, jestli je kód v pořádku, ale proč nefunguje. Stejně hloupá situace jako včera, lenochu…
TomasJ
Profil
Reaguji na _es:
Ten tvoj kód nie je dobrý.
No zatím v tom tolik zkušeností nemám, takže nevím, co to bude mít v praxi za následky pro uživatele, ale přes to všechno kód funguje správně...

Reaguji na Chamurappi:
Myslím, že ani neví k čemu tu funkci vlastně potřebuje, jinak by ji vyzkoušel a zjistil, že funguje a nemusel by psát "Takže takto je vše ok?" ... Mimochodem Chamurappi byl zakladatel prvního trestního zákoníku "Oko za oko, zub za zub" je to tak? :)
_es
Profil
xlifer:
Takže takto je vše ok?
Ako ti už napísal Chamurappi, nie je.
Ak chceš v JS programovať, tak si naštuduj aspoň základy, v tomto prípade pojmy "globálna premenná" a "lokálna premenná".
Potom ti bude jasné, čo tam je zle.

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: