Upptäckte att detta inte fungerar med:
<body onkeypress="f(event)">
men däremot med:
document.onkeydown=f(event);
direkt i scriptet.
6 svar · 822 visningar · startad av erciz
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)">
Upptäckte att detta inte fungerar med:
<body onkeypress="f(event)">
men däremot med:
document.onkeydown=f(event);
direkt i scriptet.
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.
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.
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.
Utmärkt förklarat! (y)
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