| 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: 17 let
|
|||
0
).