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
Reaguji na tima-aliena:
Přidej dovnitř funkce „var x2 = x;“ a pak alertuj x2.
peta
Profil
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
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 *
peta
diky, presne to jsem potreboval ;-)
Chamurappi
Profil
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
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
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
Reaguji na peta:
Co nechápeš na slovech „pak alertuj x2“?
Mimochodem, tady nám dlužíš odpověď.
peta
Profil
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
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 *
To, že Chamurappiho spôsob je čistejší, nie je vec názoru - to je objektívny fakt.

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: