webForumDet fria alternativet

Fånga knapptryckningar på piltangenterna?

JavaScriptur Javascript

6 svar · 822 visningar · startad av erciz

Medlem sedan maj 20011 826 inlägg
Frågan#1

Leker lite med JavaScript och skulle vilja fånga knapptryckningar från piltangenterna, men det verkar inte gå så bra. Använder Google Chrome som webbläsare. Piltangenterna verkar inte ha någon "keyCode", finns det nåt annat sätt att fånga dessa?

function f(event){
    alert(event.keyCode);
}

...

<body onkeypress="f(event)">
Medlem sedan maj 20011 826 inlägg
#2

Upptäckte att detta inte fungerar med:

<body onkeypress="f(event)">

men däremot med:

document.onkeydown=f(event);

direkt i scriptet.

Medlem sedan aug. 20039 340 inlägg
#3

Alternativ 2 "fungerar", men gör inte vad du vill att det ska. När den raden körs, så anropas funktionen f en gång, då ser du alert-boxen, sedan tas det returnerade värdet (Alltså inget värde i ditt fall) och document.onkeydown sätts till det värdet. På det sättet lär du inte fånga några knapptryckningar.

Medlem sedan maj 20011 826 inlägg
#4

nitro2k01 skrev:

Alternativ 2 "fungerar", men gör inte vad du vill att det ska. När den raden körs, så anropas funktionen f en gång, då ser du alert-boxen, sedan tas det returnerade värdet (Alltså inget värde i ditt fall) och document.onkeydown sätts till det värdet. På det sättet lär du inte fånga några knapptryckningar.

Mm, du har rätt. Den där versionen fungerade inte särskilt bra. Det slutade med denna kod:

document.onkeydown=function(e){f((e||window.event).keyCode);}

Men ska jag vara ärlig så förstår jag den inte helt och hållet. Argumentet är e, finns inte det så används ett globalt objekt (window.event)?
Sen blir inte detta samma keyCode-värden som den funktion jag hade i första inlägget, förstår inte det heller. Men detta fungerar utmärkt iaf.

Medlem sedan aug. 20039 340 inlägg
#5

Bit för bit:

document.onkeydown=function(e){
 [I]...[/I]
}

...definierar en funktion som används för att lyssna på onkeydown. Det är ungefär likvärdigt med

function listenForKeyStrokes(e){
 [I]...[/I]
};

document.onkeydown=listenForKeyStrokes;

Notera e.

f([I]...[/I]);

...är ett anrop till din funktion där du skickar med en key code.

(e||window.event)

Detta är ett uttryck som väljer ett av objekten e eller window.event. e om det existerar annars window.event. Notera e i funktionshuvudet ovan. Du skulle kunna kalla argumentet för pannkaka om du ville det. Så gör alla webbläsare utom IE. IE har istället ett/också (Beroende på version) ett objekt som heter window.event som är globalt.

([I]...[/I]).keyCode

...plockar ut egenskapen keyCode från det valda objektet.

Medlem sedan maj 20011 826 inlägg
#6

Utmärkt förklarat! (y)

Medlem sedan aug. 20039 340 inlägg
#7

För övrigt, här finns lite läsning om hur olika sätt att läsa av tangenter funkar i olika läsare: http://www.quirksmode.org/js/keys.html

182 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
180 ms — hämta tråd, inlägg och bilagor (db)