12. marts 2004 - 17:17Der er
9 kommentarer og 1 løsning
event problem ved Mozilla
Jeg har dette script: if(window.event.srcElement.className == "tab") { ... } og det fungere også ganske fint i IE + Opera, men jeg kan ikke få det til at virke i Mozilla 0.8.
Jeg har fundet frem til dette: var nav = window.Event ? true : false; //giver true i Mozilla 0.8 var nav2 = window.event ? true: false; //giver true i IE + Opera
Men så skulle man jo tro at jeg bare kunne bruge window.Event istedet for window.event, men det kan jeg ikke.. Så har jeg været inde og se hvad de returnere og window.event returnere et object, mens window.Event returnere et Event.
Jeg har prøvet alle mulige kombiantioner for at få det til at fungere, men det virker stadigvæk ikke, så derfor søger jeg hjælp her.
En funktion, der bliver afviklet under et event i Moz/NS tager dette event som argument. Sort snak. Et eksempel. function tellme(e) { if(e)event=e; // e er event objektet under Moz/NS alert(event.srcElement.tagName); } onclick=tellme;
Desuden findes srcElement ikke i NS/Moz. Det kan vi løse med defineGetter prototype modellen.
if (window.Element) { // Herinde anbringer vi element baserede prototyper. Event.prototype.__defineGetter__("srcElement", function () { var node = this.target; while (node.nodeType != 1) node = node.parentNode; return node; }); }
Det samlede eksempel <html><head><title>Untitled</title> <script> if (window.Element) { Event.prototype.__defineGetter__("srcElement", function () { var node = this.target; while (node.nodeType != 1) node = node.parentNode; return node; }); } function tellme(e) { if(e)event=e; // e er event objektet under Moz/NS alert(event.srcElement.tagName); } document.onclick=tellme; </script> </head><body> <div> En div </div> <p> Et afsnit </p> </body></html>
I øvrigt er window.event under IE og window.Event under NS/Moz fundamentalt forskellig. window.event er en instans af et object og window.Event er en prototype konstruktor. Prøv at afvikle alert(window.Event); under NS/Moz.
Det gør den nemlig olebole. Det er derfor jeg gør sådan her var node = this.target; while (node.nodeType != 1) node = node.parentNode; return node; i srcElement under NS/Moz. Jeg blandrer op gennem node-træet indtil der findes et HTMLDomElement (TextElement har nodeType 1). Jeg har valgt at gøre det på den måde for at undgå en codebranch.
I know ... men 100 mod 1 på, at der er mange andre, der ikke fik fat i den - uden lidt uddybning ... det var bare lige det ;o) /mvh
Synes godt om
Ny brugerNybegynder
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.