ugrás a tartalomhoz

Események és closure

manfreed · 2011. Feb. 15. (K), 11.47
(ha jól tudom így hívják angolul a szerkezetet)

Készítettem egy függvényt, amit osztályként használnék, A függvény példányonként egy képet kezelne, ennek a mousemove eseményével játszanék. Egy rövid kód:
function Kep(src) {
  this.kep = document.createElement('img');
  this.valtozo = 6;
  // ...
}

var k = new Kep('jojo.png');
Szeretnék egy általános mousemove eseményt, ami a függvényen belül definált tulajdonságok alapján csinál valamit. Ha így készítem el:
this.kep.onmousemove = function() {alert(this.valtozo);}
akkor a this a kép objektumra fog hivatkozni, a this.valtozo pedig érvénytelen lesz. Ha használom a closure szerkezetet (hogy hívják ezt magyarul?) így:
this.kep.onmousemove = (function(t){return function(){ alert(t.valtozo()}})(this);
akkor a t változó megkapja az objektumot, a visszaadott függvény pedig azt a t-n keresztül látni fogja. Ezzel kb megoldottam minden eseménykezelést az objektumjaimban, csakhogy! Ha én szeretném az eventet megkapni, akkor bizony sírógörcsöt kapok az Internet Explorer mellett.

Kis módosítás után:
this.kep.onmousemove = (function(t){return function(evt){ alert(evt.clientX); }})(this);
Működik minden normális böngészőben. IE6-7 alatt nem. 8 alatt nem tudtam még nézni. Esetleg tudtok valami megoldást erre?
 
1

Nem szükséges

Poetro · 2011. Feb. 15. (K), 12.38
Az Internet Explorer nem adja át paraméterben az esemény objektumot. Valamint az IE esemény objektumában sok tulajdonság nincs is benne, ami a többiekében benne van és fordítva.
var k = new Kep('jojo.png');
k.onmousemove = function (event) {
  if (!event) { event = window.event; }
  alert(k.valtozo);
}