Autor Zpráva
epsik
Profil *
pokouším se ještě jednou položit otázku na kterou mi nikdo neodpověděl (asi protože byla špatně formulovaná). Shrnu tedy problém do jednoduchoho scriptu:

	for (var i=1; i < 10; i++) {
		
               var objekt = "objekt"+i;

		document[objekt].onclick = function () {

			dalsi_funkce (i);
		
		};


Zde se odehraje to, že pokud kliknu na objekt1–objekt10, vždy se zavolá funkce ale ta proměnná se požaduje až v tuto chvíli, čili vrátí 10 (dalsi_funkce (10);)
Já bych ale potřeboval, aby se ta funkce nastavovala vždy už při jejím projetí (1–10)
Snad je mi rozumět...tak pokud někdo víte jak na to, moc prosím poraďte...já už jsem v koncích.
epsik
Profil *
}
peta
Profil
epsik
... kdyz to napises takhle
function () {dalsi_funkce (i);};
... jaka je podle tebe hodnota i?
... i je bud undefined nebo ma posledni hodnotu.
... Posledni hodnota cyklu je? for (var i=1; i < 10; i++) -> 10<10 neplati, cili i=10, i je tedy 10 nebo undefined.

v jednom programu jsem pouzival toto:
function setxEvent(x,xEvent,xFunction)
{
if (isIE) {x[xEvent]=new Function(xFunction);} //IE
else {x.setAttribute(xEvent,xFunction);} //other
}
cili mozna ti to bude fungovat jako
document[objekt].onclick = function (i) {dalsi_funkce (i);}
los
Profil *
V JavaScripte je platnosť premennej obmedzená na funkciu, v ktorej je deklarovaná (viď JavaScript closures). Takže aby sa nebola premenná i v obslužnej funkcii totožná s premennou i z cyklu, treba vytvoriť novú premennú:
for (var i = 0; i < 10; ++i)
  (function(i) {
    document["objekt" + i].onclick = function() {
	dalsi_funkce(i);
    };
  })(i);

Prípadne podobne:
function setupObject(i) {
  document["objekt" + i].onclick = function() {
    dalsi_funkce(i);
  };
}

for (var i = 0; i < 10; ++i)
  setupObject(i);
epsik
Profil *
los úžasný...moc děkuju, je to přesně to, co sem poteboval :)
už jsem podobný zápis viděl, ale nikdy jsem nechápal, k čemu vlastně slouží....v podstatě to úplně nechápu dál, budu muset studovat.
mluvím o tomhle:

for (var i = 0; i < 10; ++i)
  (function(i) {
    document["objekt" + i].onclick = function() {
	dalsi_funkce(i);
    };
  })(i);
epsik
Profil *
los teď koukám, že jsem omylem neodeslal reakci, kterou jsem psal v pátek. Chtěl jsem moc poděkovat za radu. Můj problém jsem tím vyřešil a konečně pochopil, k čemu vlastně slouží tento zápis (tuším anonymní funkce). Díky :)

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: