Autor Zpráva
Manny
Profil *
Ahoj, řeším následující problém:
var x=0;
   function zmen(x){
      document.getElementById('neco').innerHTML = vypis[x];;
      x++;
  }
  bla=zmen(x);
  setInterval(bla, 3000);

Snažím se o tohle: mám dostatečně velké pole "vypis" a chci procházet postupně jeho všechny prvky (nemůžu to mít přes cykly). Zavolám přes setInterval fci zmen s parametrem x, který obsahuje číslo prvku pole, přes document.getEle... to vypíšu, zvětším x... a za 3 sekundy to samé...

jenže problém je v tom, že mi to nechodí :/ ...nezobrazí se další prvk pole, jen ten první :/

Nevíte v čem by mohl být problém? Dělám postupné vypisování prvků z pole (vždy se zobrazí jeden prvek) po 3 vteřinách... díky za názory :)
Chamurappi
Profil
Reaguji na Mannyho:
bla=zmen(x);
Tím zavoláš funkci „zmen“ a do „bla“ přiřadíš její výsledek (co vrátí returnem, v tomto případě nic, čili undefined).
Asi bys spíš chtěl přiřadit do „bla“ funkci, která teprve bude volat „zmen“ s argumentem, tedy:
bla = function()
{
  zmen(x);
};
Samotnou definici funkce můžeš napsat také přímo do setIntervalu:
setInterval(function()
{
  zmen(x);
}, 3000);
V tom tvém kódu jsou mimochodem dvě různé proměnné „x“, jedna je lokální ve funkci „zmen“ (tu inkrementuješ) a druhá je globální (tu neměníš).
Manny
Profil *
V tom tvém kódu jsou mimochodem dvě různé proměnné „x“, jedna je lokální ve funkci „zmen“ (tu inkrementuješ) a druhá je globální (tu neměníš).
- va x=0; - chtěl jsem tu proměnnou x nastavit na nulu (na první prvek pole) - te´d jsem ji odstranil

zkusil jsem to teď takhle:
function zmen(x){
      document.getElementById('neco').innerHTML = vypis[x];;
      return x++;
  }
  setInterval(zmen, 3000);


Ale vypisuje se mi to nějak napřeskáčku... nejde to prostě po řadě..

když dám: setInterval(zmen(x), 3000); ...zůstane tam pořád ten první prvek...

Jdu apoň správnou cestou? Díky
Chamurappi
Profil
Reaguji na Mannyho:
zkusil jsem to teď takhle
Takže teď už nemáš globální „x“, máš jen to lokální, které se vytvoří při volání funkce „zmen“ a zanikne s koncem vykonávání této funkce.

Ale vypisuje se mi to nějak napřeskáčku
Mozilla volá funkci v setIntervalu s argumentem odpovídajícím časové odchylce. Pokud vím, je to jen její anomálie. Měl bys skripty testovat ve vícero prohlížečích a sledovat, co ti sdělují ve svých chybových konzolích.

když dám: setInterval(zmen(x), 3000); ...zůstane tam pořád ten první prvek...
Protože voláš „zmen(x)“ hned při nastavování intervalu a do setInterval dáváš výsledek funkce „zmen“ (takže teď číslo).
Jak vyrobit funkci volající jinou funkci s argumentem už jsem ti ukázal.

Jdu apoň správnou cestou?
Spíš ne. Nevím, co si slibuješ od toho lokálního „x“, nerozumím, proč ho tam vůbec chceš mít a proč nepoužiješ pouze to globální, u kterého bys otázku „funkce vs. volání funkce“ vůbec neřešil (třebaže je poučná).
_es
Profil
Manny:
setInterval(zmen, 3000);
Funkcia zmen je vtedy spúšťaná rovnako ako príkazom zmen(); a vtedy bude lokálna premenná x funkcie zmen rovná hodnote undefined.
Ak chceš vo funkcii zmen pracovať s globálnou premennou x, tak stačí ten prvý kód len upraviť:
var x=0;
function zmen(){
  document.getElementById('neco').innerHTML = vypis[x];
  x++;
}
setInterval(zmen, 3000);

když dám: setInterval(zmen(x), 3000);
Tak sa JavaSript opakovane pokúša spustiť funkciu vrátenú z funkcie zmen, teda nastáva len chyba, lebo z funkcie zmen žiadna hodnota typu funkcie vrátená nebola.

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: