15. december 2004 - 11:36Der er
5 kommentarer og 1 løsning
Script virker ikke i firefox
Hvorfor virker dette ikke i firefox..?
document.onkeydown = test; function test() { alert(event.keyCode); }
Og er der nogle der har en løsning, så det virker i alle browsere. Jeg bruger det til at åbne et popupvindue, hvis der bliver trykket på en bestemt tast. Er der nogle som evt. kunne teste det i NS..?
Det er pga. af mozillas anderledes måde at håndtere event-objektet på. Her skal det nemlig smides ind som argument, hvilket document.onkeydown automatisk gør: document.onkeydown = test; function test(e) { e = (typeof e == "undefined") ? event : e; k = (typeof e.which == "number") ? e.which : e.keyCode; alert(k); }
Jeg er ikke helt så stærk i javascript, og jeg kan ikke lige gennemskue din kode. Hvis du gider, så ville det være fedt hvis du kunne skære det lidt up i pap for mig.
Hvis, du ikke har tid eller gidder, så læg et svar alligevel, så du kan få nogle point's
jo, det kan jeg godt: document.onkeydown = test; kender du vel - altså den kører funktionen test når en tast bliver trykket. Nu er det sådan, at Firefox (ellere rettere sagt Mozilla-familien) har en anden måde at håndtere events på end IE. De understøtter umiddelbart begge to keyCode propertien (dog kun i nyere versioner), men problemmet er blot deres forskellige måde at få fat i event-objektet på.
Normalt i Firefox kan man få fat i event-objektet ved at sende det via et argument. Dette gør document.onkeydown automatisk i Mozilla, så vi henter det via test(e), så at e, når funktionen bliver kaldt, indeholder det event-objekt vi er interesseret i.
Problemmet er nu: Det gør IE ikke. Til gengæld kan vi skaffe adgang til event objektet på den måde du oprindeligt også gjorde, men da dette giver en fejl i Mozilla er det jo ikke så smart. Bare Mozilla skal teste for ordet event går det galt (event bliver faktisk brugt i Mozilla, bare ikke direkte i en funktion), så vi kan ikke ligefrem sige: if (event) { // IE kode} else { // mozilla kode altså teste om browseren kender event.
Vi udnytter så istedet at e argumentet er tomt i IE i denne linie: e = (typeof e == "undefined") ? event : e; Jeg ved ikke om du kender ?: operatoren, men den fungerer sådan at det indenfor parenteserne bliver testet for true eller false. Hvis den er true returneres det efter spørgsmålstegnet og hvis den er false returneres det efter kolon. Fx: var a = (2 == 3) ? "2 er lig 3" : "2 er ikke lig 3"; - prøv at gætte hvad a bliver her !-)
Nå, tilbage til koden: e = (typeof e == "undefined") ? event : e; Hvis typen af e er undefined (udefineret), så får e værdien event (til IE) og hvis e er defineret, som den bliver i Mozilla, ja så får den bare sig selv som værdi. Dette er også det samme som at skrive: if (typeof e == "undefined") {e= event;} men den anden måde er lidt pænere. Grunden til jeg skriver (typeof e == "undefined") og ikke bare (e == false) eller (!e) er pga. nogle dårlige erfaringer med IE5, som laver fejl på den måde.
Det sidste stykke kode er lidt på samme måde. Her tester vi bare for om browseren bruger which eller keyCode til at finde knappens værdi. (typeof e.which == "number") tester altså om e.which er et nummer, hvis det er det bliver k sat til e.which og ellers bliver den sat til e.keyCode. Begge to indeholder den samme talværdi for hver knap - så her er der ikke noget at være bange for.
Håber det gav en bedre forståelse - selvom jeg blev revet lidt med, men jeg syntes det var vigtigt at forstå forskellen. Og glædelig jul o<:-)
Tak for den udførlige forklaring, så lærte jeg da en hel masse...! Jeg er nemlig ikke så meget for at bruge noget kode som jeg ikke forstår, så derfor skal du have mange tak for forklaringen. Jeg kendte ikke ? operatoren, men det er da helt sikkert noget jeg også kan bruge andre steder.
Det du har taget dig tid til her, er prisværdigt for mig. Tænk hvis alle brugere af eksperten gav sig tiden til dette, hvilket suverænt forum "Eksperten" ville blive..!
>> skovenborg Jeg er superglad, for dit svar og vil ønske dig et rigtig godt nytår.
jamen du er så ganske velkommen (det er jo trods alt jul) - og et rigtigt godt nytår til dig også (samt tak for points :-)
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.