Avatar billede killifish Nybegynder
06. august 2005 - 18:34 Der er 6 kommentarer og
1 løsning

Event Handlers i IE

Dette virker ikke i IE (Firefox/Opera virker). Hvorfor?

http://www.solitude.dk/stuff/eventTest.html

Jeg *skal* bruge en event handler. Jeg ved godt at noget i retning af test(this.parentNode.id) virker i IE, men jeg skal bruge en event handler.
Avatar billede olebole Juniormester
06. august 2005 - 21:40 #1
<ole>

function addEvent(obj, evType, fn){
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, false);
        return true;
    } else {
        obj["on"+evType] = fn;
        return true;
    }
}

/mvh
</bole>
Avatar billede olebole Juniormester
06. august 2005 - 21:41 #2
- eller bare:

function addEvent(obj, evType, fn){
    if (obj.addEventListener) obj.addEventListener(evType, fn, false);
    else obj["on"+evType] = fn;
    return true;
}
Avatar billede olebole Juniormester
06. august 2005 - 21:44 #3
Hvis syntaksen:
    obj["on"+evType] = fn;
- undrer dig, kan du prøve at kikke på denne artikel:
    http://www.eksperten.dk/artikler/227
Avatar billede killifish Nybegynder
07. august 2005 - 02:30 #4
Hej Ole,

Jeg var på vej ud af døren, så mit problem blev vist ikke beskrevet grundigt nok. Mit problem var ikke med at få event'en vedhæftet. Problemet var at IE ikke forstod this.parentNode.id.

Jeg fik løst problemet af en fyr via e-mail. Løsningen for IE var at bruge window.event.srcElement;

function test() {
    if (!this.parentNode) {
        var obj = window.event.srcElement;
    } else {
        var obj = this;
    }
    var temp = obj.parentNode.id;
    alert(temp);
}

Læg et svar så deler vi point.
Avatar billede olebole Juniormester
07. august 2005 - 17:40 #5
Nej, problemet er, at du ikke forstår, hvad attachEvent gør - og hvordan den virker  :)
Når du tilføjer en event med den metode, vil ordet 'this' i den pågældende event-handler referere til browserens window-objekt - ikke som forventet til objektet, der har fået påhæftet event-handleren. Derfor kan IE naturligvis heller ikke finde this.parentNode.id  ;o)

Derfor er min løsning en hel del fiksere, da du - når du har påhæftet event'en - efterfølgende kan bruge samme syntaks i alle browsere. I virkeligheden behøver din funktion blot at se sådan ud:

function addEvent(obj, evType, fn){
    obj["on"+evType] = fn;
    return true;
}

- hvilket er helt standard JS, som alle browsere forstår ... også FF og andre Mozilla'er.

Når ikke, der er forskel på browserne, er der ingen grund til selv at introducere forskelle  ;o)
Avatar billede killifish Nybegynder
07. august 2005 - 17:48 #6
Med din funktion løber jeg vel ind i problemer når jeg vedhæfter event nummer to, ikke?
Avatar billede killifish Nybegynder
07. august 2005 - 17:57 #7
Med andre ord. Jeg troede fordelen ved at bruge addEventListener() og attachEvent() at man kan vedhæfte så mange funktioner som man lyster. Hvorimod man med obj["on"+evType] = fn; vil overskrive alle tidligere vedhæftede funktioner.
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