Autor Zpráva
imploder
Profil
Na začátku programu mimo funkce nadeklaruju 3 pole:
var pocet = new Array();
var vlevo = new Array();
var vpravo = new Array();


Není to ve funkci, takže by měly být globální.

Pak mám funkci, které je má plnit:
function vytvor(jmeno, onastr) { 
  pocet[jmeno] = onastr; 
  vlevo[jmeno] = 1-pocet[jmeno]; 
  vpravo[jmeno] = 1+pocet[jmeno]; 
}

Když v té funkci na konci zavolám alert(vpravo[jmeno]);, ukáže se správné číslo (při vytvor('obr', 6); je to 7). Když ale to samé zkusím v jiné funkci, vyskočí NaN. Jako by ty pole nebyly globální, dostupné ve všech funkcích stejně. Nevíte, čím to může být?
Měsíček
Profil
To se mi nezdá :) mohl by jsi ukázat jak "to zkoušíš v jiné funkci"?
Chamurappi
Profil
Reaguji na implodera:
Asociativní pole v JavaScriptu neexistuje. Existují jen struktury/objekty, k jejichž členům můžeš přistupovat jako ke členům asociativního pole v jiných jazycích. Nemá smysl inicializovat objekty jako new Array().

Ale to s tvým problémem nesouvisí. Živou ukázku nemáš?
imploder
Profil
Chamurappi
Živou ukázku nemáš?
Tady. Nejdřív to hodí vpravo[jmeno] ve funkci vytvor(), kde se prvky pole naplní a pak vpravo[jmeno] ve funkci sipky(), kde se mají číst (jmeno je v obou případech 'obr').

Zkusil jsem upravit stránkovací skript tak, aby umožňoval stránkovat ne jednu, ale neomezeně skupin obrázků - každá se jinak jmenuje a má vlastní nalistovanou stránku a počet obrázků na stránku. Původně tam každá ta proměnná (vlevo, pocet, vpravo) byla jenom jedna a to pole jsem udělal, aby každá skupina obrázků měla svoje. Asi to teda tak nejde, lepší bude udělat skupinu jako objekt a ty proměnné mu dát jako členské. vytvor() tam vlastně nahrazuje konstruktor objektu.
Chamurappi
Profil
Reaguji na implodera:
vlevo[jmeno] = prvni[jmeno]-pocet[jmeno];
vpravo[jmeno] = prvni[jmeno]+pocet[jmeno];
Co by mělo dělat toto? V argumentu „prvni“ je číslo 1, takže prvni["obr"] vrací undefined. Sečteš-li undefined a pocet["obr"], dostaneš číslo NaN (= není číslo).
imploder
Profil
Chamurappi
Bylo to tím. Už to funguje jak má. Nějak jsem tam všude naházel ty indexy a nevšiml jsem si, že i tam, kde nemají být :). Takže pole globální je, není s tím problém. Ty deklarace s new Array() na začátku jsou na to ale potřeba.

Dík za pomoc.
Chamurappi
Profil
Reaguji na implodera:
Místo „new Array()“ můžeš psát „[]“. Jelikož nepotřebuješ objekt typu pole, ale obecný objekt, měl bys psát spíš „new Object()“ nebo „{}“.
Měsíček
Profil
Reaguji na Chamurappiho:

"Místo „new Array()“ můžeš psát „[]“."

Pokud vytváří jen prázdnou definici pole tak může, ale při naplnění jsou to naprosto odlišné konstrukce.
<script type="text/javascript">
  var a_1 = new Array(1);
  var a_2 = [1];
    alert(a_1[0]); // Undefined
    alert(a_2[0]); // 1
</script>

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0