Autor Zpráva
OBr
Profil
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
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
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 *
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
los : Díky moc. To jsem presně potřeboval.

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: