Avatar billede chrisbuchholz Nybegynder
04. marts 2009 - 15:36 Der er 3 kommentarer og
1 løsning

Hjemmelavet addEvent: this scope holder ikke i IE

Hej,

jeg har lavet en funktion til at styrer mine events crossbrowser, så jeg blot kan registrere en event med addEvent(oElm, Tr, fn, uC) og så holder den selv styr på at gøre det crossbrowser kompatibelt, men jeg har opdaget at this-scoped ikke holder i delegate funktionen.

Jeg vil gerne kunne gøre dette, men IE får det galt i halsen:

var oElm = document.getElementById('et-element');
waiter.addEvent(oElm, 'click', function() { this.style.background = '#ff0000'; }, false);

Jeg kan se at i IE så referere this, inde i delegate funktionen, til Object Window og ikke det element som eventen er registreret hos, som det ellers gør i alle andre browsere.

Her er funktionen:
http://paste2.org/p/158117
Avatar billede olebole Juniormester
05. marts 2009 - 15:42 #1
<ole>

Hvor this peger hen i forskellige situationer, kræver et ret godt overbilk. Det omhandler én af de artikler, jeg har klar til den nye version af www.dengodekode.dk  =)

Forøvrigt har du slet ikke brug for at bruge this i det viste eksempel:

waiter.addEvent(oElm, 'click', function() { oElm.style.background = '#ff0000'; }, false);

/mvh
</bole>
Avatar billede chrisbuchholz Nybegynder
05. marts 2009 - 17:03 #2
olebole, du har ret i at det kan løses i det viste eksempel, men ikke i den sammenhæng jeg faktisk bruger det...

Jeg løste problemet ved bare at prototype det på Object og så tage den derfra, hvilket virker helt perfekt.

Og ja, vi har haft snakket om den artikel, og jeg har også rykket dig lidt for den:P
Avatar billede olebole Juniormester
08. marts 2009 - 19:43 #3
Object.prototype bør du aldrig røre. Object er det mest grundlæggende object i JS - og det object, alle andre arver efter - hvorfor det bør betragtes som 'helligt'  =)
Avatar billede olebole Juniormester
08. marts 2009 - 19:56 #4
Dels bruger man ofte object Object som hash table, og så er det ikke hensigtsmæssigt at fylde Object op med properties.

Desuden skal du huske, at alt arver fra Object. Det betyder, at hvis jeg f.eks. skriver:
    Object.prototype.bla = function(){return "Det her er ikke nødvendigvis så fedt."};

- så har alle andre objekter i dokumentet - strenge, tal, arrays, funktioner, m.fl. - den samme metode:
    var sStr = "OleBoleBum ... Ihh, hvor er du ***";
    alert( sStr.bla() );
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