Avatar billede Droa Seniormester
06. juni 2011 - 12:12 Der er 3 kommentarer og
1 løsning

Javascript Events og Objekter vil ikke sammen

Hej eksperter.. jeg har et mindre problem.

Det er sådan at jeg har prøvet og lavet en event starter igennem et objekt jeg har lavet.


function DropDownAjax()
{
    this.lastvalue = "";
    this.currentvalue = "";
   
    this.onChangeEvent = function(id,callback,type,thiselement)
    {
        if(type == "onkeyup")
        {
            document.getElementById(id).onkeyup = function(){
                thiselement.lastvalue = thiselement.currentvalue;
                thiselement.currentvalue = document.getElementById(id).value;
                callback();
                };
        }
        else if(type == "onchange")
        {
            document.getElementById(id).onchange = function(){
                thiselement.lastvalue = thiselement.currentvalue;
                thiselement.currentvalue = document.getElementById(id).value;
                callback();
                };
        }
    }
}


det bliver så initializeret med

dropdown = new DropDownAjax();
    dropdown.onChangeEvent("search",function()
            {
                document.getElementById("myDiv").innerHTML = "Last Value: "+ dropdown.lastvalue +"<br>Current Value: "+dropdown.currentvalue;
                if(dropdown.lastvalue != dropdown.currentvalue)
                {
                    xmlhttp1.GetData("test.php",function()
                    {
                        if (xmlhttp1.readyState()==4 && xmlhttp1.status()==200)
                        {
                          //document.getElementById("myDiv").innerHTML=xmlhttp1.responseXML();
                        }
                    });
                }
    },"onkeyup",dropdown);


Det virker også helt perfekt... problemet er så at jeg er nød til og lave en referance for objektet igennem min methode, da de callbacks jeg laver ikke har adgang til "this"... det gør mig nu ikke så meget, da jeg godt forstår javascripts snøvlede event handlers, på den måde... men det er så mere, om man kunne lave en referances på en "stealth" agtig måde, så man f.eks kunne gøre det automatisk?

håber nogen har svar :)
Avatar billede intenz Novice
06. juni 2011 - 16:58 #1
Du kan bare sende det med som parameter i din callback.

I DropDownAjax:
callback(this);

I din callback:
dropdown.onChangeEvent("search",function(obj) {
...
Avatar billede intenz Novice
06. juni 2011 - 17:06 #2
Jeg lagde lige mærke til, at du havde gemt dine callbacks inde i en eventhandler.

Hvis du vil have referencen til element (document.getElementById(id)), kan du bruge det jeg skrev over.

Hvis du skal have referencen til objektet (DropDownAjax) skal du gemme den i en variablen undenfor din eventhandler, f.eks. sådan.

var that = this;
document.getElementById(id).onkeyup = function(){
                thiselement.lastvalue = thiselement.currentvalue;
                thiselement.currentvalue = document.getElementById(id).value;
                callback(that);
};
Avatar billede Droa Seniormester
07. juni 2011 - 10:37 #3
takker.. jeg har prøvet at holde så meget inde i mit objekt som muligt, da det er meningen man kan oprette flere af slagsen. så det er lidt svært og lave referencer udenfor objektet
Avatar billede Droa Seniormester
08. juni 2011 - 13:52 #4
jeg forstod nu hvad du mente med that = this.. så ikke du sendte den ind i eventet nedenfor.. sorry.. det var lige det jeg skulle bruge, mange tak igen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester