prototype, bind...
Sziasztok!
Egy új div létrehozásakor update-tel szeretnék neki HTML kódot (táblázat, input mezők stb) átadni, aminek az onchange eseményében egy másik saját függvényt szeretnék meghívni. Valahogy így:
fuggveny1: function() {
gusztustalanmegoldas = this;
var htmlkod = "<table><tr><td>Beviteli mezo</td><td><input name = 'i1' type = 'text' onchange = 'gusztustalanmegoldas.fuggveny2(value);' value = '0' /></td></tr></table>";
this.ujdiv = new Element("div").update(htmlkod);
this.parent.appendChild(this.ujdiv);
}
fuggveny2: function() {
//masik fuggveny
}
A problémám, hogy a stringen belül a this által mutatott objektum a HTMLInputElement lesz, ezért csak meggányolni tudtam egy globális változóval.
Úgy tudom a bind az ilyen this-el kapcsolatos anomáliák feloldására van, de hogy ebben a konkrét esetben hogyan tudnám alkalmazni, arra még nem jöttem rá. Valakinek 5lete?
Üdv:
István
■ Egy új div létrehozásakor update-tel szeretnék neki HTML kódot (táblázat, input mezők stb) átadni, aminek az onchange eseményében egy másik saját függvényt szeretnék meghívni. Valahogy így:
fuggveny1: function() {
gusztustalanmegoldas = this;
var htmlkod = "<table><tr><td>Beviteli mezo</td><td><input name = 'i1' type = 'text' onchange = 'gusztustalanmegoldas.fuggveny2(value);' value = '0' /></td></tr></table>";
this.ujdiv = new Element("div").update(htmlkod);
this.parent.appendChild(this.ujdiv);
}
fuggveny2: function() {
//masik fuggveny
}
A problémám, hogy a stringen belül a this által mutatott objektum a HTMLInputElement lesz, ezért csak meggányolni tudtam egy globális változóval.
Úgy tudom a bind az ilyen this-el kapcsolatos anomáliák feloldására van, de hogy ebben a konkrét esetben hogyan tudnám alkalmazni, arra még nem jöttem rá. Valakinek 5lete?
Üdv:
István
observe
az ujdiv-ből kiindulva menj le a dom fában az inputig es observ-vel rakdt rá az event-et.
observe?
fuggveny1: function() {
this.ujdiv = new Element("Div");
document.appendChild(this.ujdiv);
this.b1 = new Element("Input", {"type": "button", "value": "Kiértékelés"});
this.b1.observe(this.fuggveny2());
this.ujdiv.appendChild(this.b1);
}
fuggveny2: function() {
alert(this);
}
Üdv: István
No, csak lett egy egész
this.b1.onclick = this.fuggveny2.bindAsEventListener(this);
vagy ha több utasítást akarok meghívni
this.b1.onclick = function(){
this.fuggvey2();
this.fuggveny3(); //stb
}.bindAsEventListener(this);
Azért kíváncsi lennék arra observe féle megoldásra az eredeti kérdésnél a stringként átadott htmlkódhoz. Csak okulásképp.
Köszi az eddigi választ is.
Üdv: István
Sőt ez a megoldás sem
this.b1.onclick = function(){this.fuggveny2()};
Üdv: István
Bármely dom beli objektumra
http://www.prototypejs.org/api/element/observe
A Te esetedben: van egy függvényed, amit ha jól látom az input onchange-re akarsz rakni (megjegyzés: ha jól rémlik a Firefoxban csak akkor futnak le az onchange események inputon, ha az inputról lekerül a focus és volt változás benne, tehát ha azt akarod, hogy minden billentyűleütésre meghívódjon a függvény, akkor onkeydown-t használj)
Itt jön létre a div, és bele is rakod a htmlkod stringet.
Utána ugyanebben a divben lemegyünk az első inputig és rárakjuk a fuggvenyNeve függvényt az onkeydown eseményre. Prototype-ban on nélkül kell megadni az eseményeket: onload -> load, onclick -> click, stb...
Remélem tudtam segíteni és nem zavartalak mégjobban össze :)