Autor Zpráva
Petr T.
Profil *
Začínám s JS, mám následující kousek kódu:

for(var place in Places) {
var marker = new AMarker(Places[place], { label : place.charAt(0), title : place, onClick: function() {
switch(place) {
..........
}
............
} });
}

No a v tom druhém řádku se párkrát objeví place a má správnou hodnotu, u toho switche má hned potom ale špatnou. Asi to bude jen nějaká začátečnická chyba, ale nemůžu na to přijít. Poradíte mi prosím někdo??
los
Profil *
Pri definovaní anonymnej funkcie sa naviazala premenná place na lokálnu premennú place. Takže keď meníš cyklom hodnotu lokálnej premennej place, meníš aj hodnotu premennej v anonymnej funkcii, pretože je to tá istá premenná (viac na Google: javascript closures).

Riešením je dať to do ďalšej funkcie (alebo posielať konštruktoru AMarker iba place s tým, že zvyšok si nainicializuje sám):
for (var place in Places) {

(function(place) {
var marker = new AMarker(Places[place], {label: place.charAt(0), title: place, onClick: function() {
switch (place) {
...
}
}});
})(place);
}

Tú funkciu, ktorú som tam pridal, môžeš samozrejme vytiahnuť niekam vyššie a potom ju len volať s parametrom place, aby to bolo prehľadnejšie.
Petr T.
Profil *
Udělal jsem to podle tvé rady a přestalo to fungovat úplně, resp. už mi to nevykresluje ani ty značky :(
Nevím, jestli jsem se předtím dobře vyjádřil, v tom cyklu to běží pro různá místa (A,B,C)... Ale uvnitř té anonymní function se vůbec neprojeví ta hodnota z cyklu for, je tam pořád to samé, přitom bych potřeboval, aby tam bylo to samé, co aktuálně obsahuje druhý řádek (tzn. taky A,B,C,..) podle toho, jak zrovna procházím cyklem... Nebo nešlo by to obejít nějak jinak??
los
Profil *
Jediné, čo som pridal, bolo, že som obalil Tvoj pôvodný kód do funkcie:
(function(place) {/*pôvodný kód*/})(place);
Po tejto úprave by to malo ísť. Ak Ti to prestalo fungovať, tak je zrejme problém v nejakej chýbajúcej zátvorke alebo v niečom podobnom.

Šlo by to obísť inak, ale to závisí od toho, k čomu všetkému máš v tej funkcii prístup. Ak máš prístup k tomu objektu, v ktorom je definovaná tá funkcia onClick, tak sa môžeš dostať ku vlastnosti title. Možno bude fungovať, keď v tej konštrukcii switch namiesto place použiješ this.title, ale to závisí od ďalších vecí.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0