Autor | Zpráva | ||
---|---|---|---|
tim-alien Profil * |
ahoj,
muzete mi prosim poradit. Kdyz dynamicky vytvorim div, tak nevim jak mu nastavit atribut onclick na funkci s parametrem. Kdyz to udelam takto: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <style type="text/css"> #box {width: 50px; height: 50px; background-color: green;} </style> <script> var x = 0; function test() { var newDiv = document.createElement('div'); var body = document.getElementsByTagName('body')[0]; newDiv.id = 'box'; newDiv.onclick = function() {alert(x)}; body.appendChild(newDiv); x++; } </script> </head><body onload="test();"></body></html> tak po kliknuti na div je hodnota x = 1, ale ja potrebuji, aby tam byla puvodni hodnota v dobe zadavani, tedy x = 0. Vim, ze problem je v tom, ze tu funkci alert zadavam jako odkaz a ne jako hodnotu, ale nevim jak to udelat :-( Dekuji |
||
Chamurappi Profil |
#2 · Zasláno: 28. 8. 2008, 00:55:32
Reaguji na tima-aliena:
Přidej dovnitř funkce „var x2 = x;“ a pak alertuj x2. |
||
peta Profil |
#3 · Zasláno: 28. 8. 2008, 07:41:35
chybna logika.
alert(x) zobrazi prave aktualne nastavene x. Po spusteni test() se zvysi x na 1 a vytvori se neco jako funkce xxx() {alert(x);} Pak spustis kliknuti, ktere veme globalni x a zobrazi prave nastavenou hodnotu 1. K tomuto vyuzivam tyto finty: onclick=new Function('alert('+x+');'); nebo newDiv.x = x; newDiv.onclick=function() {alert(this.x)}; Chamurappi Tva rada neresi, nepochopil jsi problem. |
||
Chamurappi Profil |
#4 · Zasláno: 28. 8. 2008, 10:01:09
Reaguji na peta:
Vážně? Tak mi to vysvětli. Poradil jsem mu vesměs totéž, co ty, akorát bez prasárny „new Function()“. |
||
tim-alien Profil * |
#5 · Zasláno: 28. 8. 2008, 10:05:40
peta
diky, presne to jsem potreboval ;-) |
||
Chamurappi Profil |
#6 · Zasláno: 28. 8. 2008, 10:07:17
Reaguji na tima-aliena:
Můj postup je čistší a efektivnější. Až budeš potřebovat předávání něčeho víc, než je číslo, tak se z petovy rady zblázníš. |
||
peta Profil |
#7 · Zasláno: 28. 8. 2008, 12:47:12 · Upravil/a: peta
Chamurappi
Tvuj zpusob mi zobrazi z X jednicku. To znamena ze nezobrazi predchozi stav 0 a to znamena, ze Petovi prasarny funguji na rozdil od Chamurappi cisteho zapisu. |
||
Timy Profil |
#8 · Zasláno: 28. 8. 2008, 12:53:25 · Upravil/a: Timy
peta
„Tvuj zpusob mi zobrazi z X jednicku. To znamen,a ze nezobrazi predchozi stav 0 a to znamen,a ze Petovi prasarny funguji na rozdil od Chamurappi cisteho zapisu.“ Ne, to pouze znamená, že jsi nevstřebal a nepochopil celý Chamurappiho zápis. Máš alertovat x2, ne x. A v x2 bude samozřejmě nula (viz ukázková stránka). |
||
Chamurappi Profil |
#9 · Zasláno: 28. 8. 2008, 14:03:13
|
||
peta Profil |
#10 · Zasláno: 28. 8. 2008, 15:45:52 · Upravil/a: peta
Timy
:) Vidis, a ja text 'Přidej dovnitř funkce „var x2 = x;“ a pak alertuj x2.' chapu zase takto a pridavam to vse dovnitr funkce: newDiv.onclick=function() {var x2 = x; alert(this.x2);}; coz je uz od pohledu naprosto zbytecne, a o tom prave pisi. Samozrejme dik za ukazku, jak to bylo zrejme mysleno. Take zajimavy zpusob, nerekl bych ze zas tak cistejsi, ale to je vec nazoru. Totez zrejme zkusil tim-alien a zjistil, ze mu to nefunguje, tak zkusil dalsi v poradi. Chamurappi Myslis, ze dluzim? Pak myslis mylne. |
||
Chamurappi Profil |
#11 · Zasláno: 28. 8. 2008, 16:03:13
Reaguji na peta:
„chapu zase takto a pridavam to vse dovnitr funkce“ Přiznávám, že i to je možná interpretace, se kterou jsem nepočítal. „nerekl bych ze zas tak cistejsi, ale to je vec nazoru“ Kvůli tvému „new Function“ musí prohlížeč při kliknutí parsovat a vyhodnocovat další JavaScriptový blok. |
||
los Profil * |
#12 · Zasláno: 28. 8. 2008, 16:04:44
To, že Chamurappiho spôsob je čistejší, nie je vec názoru - to je objektívny fakt.
|
||
Časová prodleva: 16 let
|
0