Hejsan.
Jag undrar lite hur det här med event handlers fungerar.
Ett XmlHttpRequest-objekt har ju "onreadystatechange" som kan köra en funktion varje gång "readyState" ändras.
Jag håller på och bygger en sorts "Ajax"-class. Där använder jag XmlHttpRequest inuti min class.
Ni vill jag köra en av classens funktioner när "onreadystatechange" triggas.
Men jag upptäckte att jag längre inte kan komma åt själva classens egenskaper när funktionen körs, dvs. "this" refererar inte till classen längre utan till själva funktionen som körs...antar jag?
Ska jag binda själva funktionen till "onreadystatechange" på något speciellt sätt?
Hoppas någon förstår vad jag vill åstakomma.
Här är i alla fall en väldigt förenklad kod:
function myObject()
{
this.myValue=32;
this.myFunction = function(){alert(this.myValue)};
//...här skapas ett XmlHttpRequest osv...
xmlhttp.onreadystatechange = ? //Här vill jag att myFunction() ska köras
xmlhttp.open...
}
onreadystatechange är ju en metod i xmlhttp, så this syftar på xmlhttp och inte myObject-instansen. Ger du xmlhttp en referens till myObject går det bättre.
function myObject()
{
this.myValue=32;
this.myFunction = function(){alert(this.myValue)};
//...här skapas ett XmlHttpRequest osv...
xmlhttp.myObjectReference = this;
xmlhttp.onreadystatechange = function () { this.myObjectReference.myFunction(); }
xmlhttp.open...
}
Efter att ha läst på lite, bland annat denna artikel så vill jag påstå att "onreadystatechange" inte fungerar på samma sätt som andra "vanliga" events, i alla fall inte i Firefox.
Jämför följande två kodexempel:
window.onclick = function(){alert(this)}; //this refererar här till window-objektet
xmlhttp.onreadystatechange = function(){alert(this)}; //this refererar här till själva funktionen, och INTE xmlhttp-objektet
spango, tyvärr så verkar det inte fungera likadant i alla webbläsare.
I Opera och Safari och så verkar "this" referera till XmlHttpRequest-objektet i funktionen som man sätter i "onreadystatechange". (Precis som jag tycker att det borde fungera i alla webbläsare).
Jag tror att jag är en lösning på spåret nu, postar en färdig kod lite senare.
Förresten, XmlHttpRequest är nu så otroligt trendigt idag så det borde väl finnas fler som uppmärksammat detta? Kanske finns det någon artikel? Sökte lite men hittade inte så mycket.