Autor | Zpráva | ||
---|---|---|---|
OBr Profil |
#1 · Zasláno: 20. 3. 2008, 15:56:38
Ahoj,
mám problém s tímhle scriptem. <script type="text/javascript"> function klikbutton() { this.kliku=0; this.draw = function() { var input = document.createElement("input"); input.setAttribute("type","button"); input.setAttribute("value","Pocitej klinuti"); input.onclick=this.popup; // mozna nejak pouzit this.popup.call(this) ? document.body.appendChild(input); } this.popup = function() { this.kliku++; alert(this.kliku); } } prvni = new klikbutton(); prvni.draw(); </script> Měl by vygenerovat tlačítko(a) a pro každé po kliknutí napsat kolikrát bylo kliknuto. Nevím jak odkázat na původní objekt, this obsahuje kliknuté tlačítko, ne objekt který ho vytvořil. Nakopněte mě prosím správným směrem. Kde dělám chybu? Díky |
||
peta Profil |
#2 · Zasláno: 21. 3. 2008, 08:20:50
OBr
odkaz na stranku. Cast kodu bez ovladacich prvku je stejne bezcenna jako nic nenapsat. Co hlasi JS konzola? Chyba: document.body has no properties Zdrojový soubor: file:///C:/Documents%20and%20Settings/webmaster/Plocha/tlacitko.htm Řádek: 12 A tim bych mohl skonci, problem byl nalezen. Nezobrazi se ani jen to tlacitko. input.onclick=this.popup Zcela logicky se povazuje THIS za INPUT, protoze tu funkci priradis na objekt INPUT. To presne rika ten radek. Uz to neni prvni.kliku ale input.kliku a input je navazany v body. Pokud chces neco z prvniho, je treba napsat prvni. Pripadne nekdo dojde mozna s lepsim resenim. Daleko jednodussi by bylo pocet kliku priradit primo na input. Protoze s tim new xxxbutton() stejne vzdy vytvoris nove tlacitko a pak muzes pracovat uz s nim a ne s pomocnym objektem "prvni". |
||
OBr Profil |
#3 · Zasláno: 21. 3. 2008, 09:31:15
Posílal jsem výřez kódu. Takže trochu více obalené (navíc pouze tag html,body).
<html><body><script type="text/javascript"> function klikbutton() { this.kliku=0; this.draw = function() { var input = document.createElement("input"); input.setAttribute("type","button"); input.setAttribute("value","Pocitej klinuti"); input.onclick=this.popup; // mozna nejak pouzit this.popup.call(this) ? document.body.appendChild(input); } this.popup = function() { this.kliku++; alert(this.kliku); } } prvni = new klikbutton(); prvni.draw(); </script> </body> </html> Nejraději bych navázal přímo na tlačítko a odkazoval se pomoci prvni.click. Problém je v tom že se snažím vytvořit rádoby knihovnu. To znamená že se tam může navíc objevit i takovýto zápis. druhy = new klikbutton(); druhy.draw(); treti = new klikbutton(); treti.draw(); Když bych si vytvořil druhou instanci tak bych četl z tlacitka druhy stale prvni.kliku což je v tomhle případě nežádoucí. Myslím že by mi mohla pomovi funkce call. Jak ji ale navázat? Napadlo mě input.onclick=this.popup.call(this);, což nefunguje, není to odkaz na funkci. |
||
los Profil * |
#4 · Zasláno: 21. 3. 2008, 11:37:06
V tomto konkrétnom prípade by som ten počet kliknutí ukladal v inpute, ale závisí od teba, ako to chceš používať.
this.draw = function() {... input.kliku = 0; ...}; Prípadne keď si chceš počet kliknutí pamätať v objekte typu klikbutton, tak potom takto: this.draw = function() {... var t = this; input.onclick= function() { t.popup(); }; ...}; Alebo lepší zápis: function klikbutton() { } klikbutton.prototype = { kliku: 0, draw: function() { ... }, popup: function() { ... } } |
||
OBr Profil |
#5 · Zasláno: 21. 3. 2008, 11:44:44
los : Díky moc. To jsem presně potřeboval.
|
||
Časová prodleva: 16 let
|
0