Autor | Zpráva | ||
---|---|---|---|
Suta Profil |
Omlouvam se za nepouziti diakritiky, jsem ve francii a pisu na francouzske klavesnici...
Jak se zbavit kontextu promenne? mam takovouto funkci: for(var i=0; stylNameArray.length>i; i++) { neco[i].onclick = function() { zmenaStylu("styl_pozadi_oken_0" + i); } } fungovat by to melo tak, ze pri kliknuti na: element neco[0] by mela byt spustena funkce zmenaStylu s parametrem styl_pozadi_oken_00 pri kliknuti na element neco[1] by mela byt spustena funkce zmenaStylu s parametrem styl_pozadi_oken_01 ... atd ale bohuzel se to chova tak, ze dana funkce je volana vzdy s parametrem napr. styl_pozadi_oken_05, za predpokladu ze cyklus probiha 5x (tedy drzi si kontext promenne i, ktera ma po skonceni cyklu hodnoutu 5) priradi ne hodnotu "0","1","2"... ale odkaz na promennou i ! a tim padem pri zavolani funkce je funkci predana vzdy hodnota promenne i... potreboval bych neco, co priradi aktualni hodnotu promenne i bez ohledu na to, zda-li bude v budoucnu zmenena, ne odkaz na ni. Diky za pripadnou pomoc. Edit: Ted zjistuji, ze neuspeji ani s: $("m_3_1_1_" + i).onclick = function() { if(i==0) zmenaStylu("styl_pozadi_oken_0" + "0"); if(i==1) zmenaStylu("styl_pozadi_oken_0" + "1"); if(i==2) zmenaStylu("styl_pozadi_oken_0" + "2"); if(i==3) zmenaStylu("styl_pozadi_oken_0" + "3"); } Moderátor Chamurappi: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
Leo Profil |
#2 · Zasláno: 30. 11. 2009, 13:30:44
Zkuste toto
for(var i=0; stylNameArray.length>i; i++) { (function(){ var n = i; neco[i].onclick = function() { zmenaStylu("styl_pozadi_oken_0" + n); } })(); } Leo |
||
Chamurappi Profil |
#3 · Zasláno: 30. 11. 2009, 13:56:05 · Upravil/a: Chamurappi
Reaguji na Lea:
Jednodušší na úpravu asi bude, když si vyrobí lokální „i“ jako argument funkce a strčí do něj aktuální hodnotu při volání: for(var i=0; stylNameArray.length>i; i++) { (function(i){ neco[i].onclick = function() { zmenaStylu("styl_pozadi_oken_0" + i); } })(i); } Reaguji na Sutu: Říká se tomu lexikální uzávěr (anglicky closure). |
||
Suta Profil |
#4 · Zasláno: 30. 11. 2009, 13:58:20
Leo:
Funguje, diky moc. Muzu jeste poprosit o vysvetleni principu? Automaticky provedene funkci rozumim, jen nevim, kde presne ztraci promenna n spojitost s puvodni promennou i... |
||
Suta Profil |
#5 · Zasláno: 30. 11. 2009, 14:22:20
Chamurappi:
Aha, takze lokalni promenna. Nyni rozumim. Predevsim diky za termin lexikální uzávěr (anglicky closure), uz jsem podobne situace resil vicekrat a vzdy jsem to musel resit slozite. Nyni vim pod cim hledat. Diky moc! |
||
Časová prodleva: 14 let
|
0