Does pressing a key generate a keyboard event?

Mestre Tastaturevents i JavaScript

29/11/2025

Rating: 4.09 (6583 votes)

Mestre Tastaturevents i JavaScript

I en verden, hvor brugerinteraktion driver weboplevelser, er evnen til at fange og reagere på tastaturinput afgørende. JavaScript tilbyder en robust mekanisme til at håndtere disse interaktioner gennem tastaturevents. Uanset om du bygger en spilapplikation, en effektiv formular eller blot ønsker at tilføje genveje til din hjemmeside, er en dyb forståelse af tastaturevents uundværlig. Denne artikel vil guide dig gennem de forskellige typer af tastaturevents, deres egenskaber og bedste praksis for deres anvendelse, med fokus på keydown, keyup og den nu forældede keypress.

How do I trigger a Keyup event in jQuery?
Trigger the keyup event for the selected elements: Attach a function to the keyup event: Optional. Specifies the function to run when the keyup event is triggered. How use the event.which property to determine which key was pressed. ❮ jQuery Event Methods Track your progress - it's free!
Indholdsfortegnelse

KeyboardEvent-interfacet: Fundamentet for Tastaturinteraktion

Kernen i JavaScripts håndtering af tastaturinput er KeyboardEvent-interfacet. Dette interface, der nedarver fra UIEvent og derefter Event, leverer en rig mængde information om hver tastetryk. Når en bruger interagerer med tastaturet, skabes der et KeyboardEvent-objekt, som indeholder detaljer om den trykkede tast, dens position, og om andre modifikatortaster (som Shift, Ctrl, Alt) var aktive. Du kan tilføje event-lyttere direkte til HTML-elementer eller til det globale document-objekt for at fange disse events.

For eksempel kan du lytte efter en keydown-event på et element med ID'et 'type-here' således:

let elem = document.getElementById('type-here'); elem.addEventListener('keydown', function(event) { // Håndter keydown-event her console.log('Tast ned: ' + event.key); }); 

Alternativt kan du bruge inline-attributter som onkeyup, selvom det generelt anbefales at adskille JavaScript fra din HTML for bedre vedligeholdelse:

function handleKeyUp(event) { console.log('Tast op: ' + event.key); } 

De Primære Tastaturevents: keydown, keypress og keyup

JavaScript definerer primært tre typer af tastaturevents:

  • keydown: Denne event udløses, så snart en tast trykkes ned. Den udløses også gentagne gange, hvis tasten holdes nede (auto-repeat).
  • keypress: Denne event udløses kun, når en tast, der producerer en tegnværdi, trykkes ned. Taster som Shift, Ctrl, Alt eller F1 udløser ikke keypress-eventen, da de ikke direkte producerer et tegn. Denne event er nu forældet og bør undgås.
  • keyup: Denne event udløses, når en tast slippes.

Valg af den Rette Event: keydown vs. keyup

Når man skal vælge mellem keydown og keyup, er der flere overvejelser. keydown udløses før browseren behandler tastetrykket, hvilket betyder, at du kan afbryde browserens standardhandling (f.eks. at skrive et tegn i et inputfelt) ved at kalde event.preventDefault(). keyup udløses efter, at browseren har behandlet tastetrykket, så event.preventDefault() her vil ikke forhindre den allerede udførte handling.

For de fleste brugsscenarier, især når det kommer til tastaturgenveje eller at fange alle typer af tastetryk, er keydown ofte det foretrukne valg på grund af dets evne til at forhindre standardhandlinger og dets bredere dækning af taster.

keypress bør undgås, da den er forældet og ikke kan registrere modifikatortaster eller specialtaster effektivt.

How to handle a keyDown event in JavaScript?
Here is an example of listening to a keydown event on an element whose id is, 'type-here': Alternatively, you can use the handler methods like, onKeydown(event), onKeyup(event), onKeypress(event) with the element to handle keyboard events. Here is an example of handling a keyup event on an input element:

Udforskning af KeyboardEvent-egenskaber

KeyboardEvent-objektet er spækket med nyttige egenskaber til at identificere og reagere på tastaturinput:

EgenskabBeskrivelseForældet?
altKeyBoolean (true/false). Er sand, hvis Alt-tasten blev trykket ned.Nej
ctrlKeyBoolean (true/false). Er sand, hvis Ctrl-tasten blev trykket ned.Nej
shiftKeyBoolean (true/false). Er sand, hvis Shift-tasten blev trykket ned.Nej
metaKeyBoolean (true/false). Er sand, hvis Meta-tasten (f.eks. Windows-tasten eller Command-tasten på Mac) blev trykket ned.Nej
keyStrengen, der repræsenterer den tast, der blev trykket ned (f.eks. "a", "A", "Enter", "ArrowUp"). Den mest moderne og anbefalede egenskab.Nej
codeStrengen, der repræsenterer den fysiske placering af tasten på tastaturet (f.eks. "KeyA", "ArrowUp", "Digit1"). Uafhængig af layout og tastaturskift.Nej
getModifierState()Metode, der returnerer en boolean, der angiver tilstanden for modifikatortaster (CapsLock, NumLock osv.).Nej
charCodeUnicode-værdien af tasten. Forældet. Brug key i stedet.Ja
keyCodeNumerisk kode for tasten. Forældet. Brug key eller code i stedet.Ja
whichNumerisk kode for tasten. Forældet. Brug key eller code i stedet. Varierer mellem browsere for visse taster.Ja

key vs. code: Hvornår skal hvad bruges?

Valget mellem event.key og event.code afhænger af dit specifikke behov:

  • Brug event.key, når du har brug for den faktiske tegnværdi af den trykkede tast. Dette er nyttigt, når du skal reagere på bogstaver, tal eller symboler, og det tager højde for tastaturlayout og sprogindstillinger. For eksempel vil `event.key` være 'a' eller 'A' afhængigt af, om Shift er trykket.
  • Brug event.code, når du har brug for at identificere den fysiske placering af tasten på tastaturet. Dette er ideelt til at implementere tastaturgenveje (hotkeys), der skal fungere ens uanset hvilket tastaturlayout eller sprog brugeren har valgt. For eksempel vil `event.code` altid være 'KeyA' for A-tasten, uanset om det er et 'A' eller et 'a', eller endda et andet bogstav på et andet layout.

Det er vigtigt at bemærke, at event.key kan ændre sig, hvis brugeren skifter sprog eller tastaturlayout, mens event.code forbliver konstant, da den refererer til den fysiske tast. For eksempel, på et tysk tastatur kan 'Y'-tasten have koden 'KeyZ', hvis man forventer et amerikansk layout.

Modifikatortaster og Tastaturkombinationer

Modifikatortaster som Ctrl, Shift og Alt er afgørende for at skabe avancerede funktioner. Du kan tjekke, om disse taster er aktive ved hjælp af deres respektive egenskaber (event.ctrlKey, event.shiftKey, event.altKey). Ved at kombinere disse med event.key eller event.code kan du implementere komplekse tastaturgenveje:

document.addEventListener('keydown', function(event) { if (event.ctrlKey && event.key === 'z') { alert('Ctrl+Z trykket - Fortryd handling!'); event.preventDefault(); // Forhindrer browserens standardfortryd-handling } if (event.metaKey && event.key === 's') { alert('Cmd+S trykket på Mac - Gem handling!'); event.preventDefault(); } }); 

Håndtering af Standardhandlinger

Mange tastetryk udløser standardhandlinger i browseren, såsom at indsætte et tegn i et inputfelt, scrolle siden eller åbne en dialogboks. Som nævnt tidligere, kan du forhindre disse standardhandlinger ved at kalde event.preventDefault() inden i din event-handler, især når du bruger keydown.

Overvej et inputfelt, der kun skal acceptere tal og specifikke tegn:

const phoneInput = document.getElementById('phone'); phoneInput.addEventListener('keydown', function(event) { const allowedKeys = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '(', ')', '-', 'Backspace', 'ArrowLeft', 'ArrowRight', 'Delete']; if (!allowedKeys.includes(event.key)) { event.preventDefault(); } }); 

Denne kode sikrer, at kun de tilladte tegn og navigationstaster kan indtastes. Det er dog vigtigt at huske, at denne metode ikke er 100% sikker mod alle inputmetoder (f.eks. copy-paste), og eventet input kan være et bedre alternativ til at validere det endelige input.

Deprecated Egenskaber: keyCode, charCode, which

I fortiden var keyCode, charCode og which de primære måder at identificere tastetryk på. Disse egenskaber er dog nu forældede på grund af inkonsekvent browserunderstøttelse og manglende klarhed. Moderne webudvikling bør udelukkende fokusere på key og code for at sikre kompatibilitet og klarhed.

How do I trigger a Keyup event in jQuery?
Trigger the keyup event for the selected elements: Attach a function to the keyup event: Optional. Specifies the function to run when the keyup event is triggered. How use the event.which property to determine which key was pressed. ❮ jQuery Event Methods Track your progress - it's free!

Virtuelle Tastaturer og IME

Når man arbejder med virtuelle tastaturer (som på tablets eller smartphones) eller Input Method Editors (IME), kan tastaturevents opføre sig anderledes. Specifikationen angiver, at for sådanne inputenheder, hvor tastaturet ikke er et standard fysisk tastatur, kan event.keyCode være 229, og event.key kan være "Unidentified". Selvom nogle virtuelle tastaturer kan rapportere korrekte værdier for key og code for visse taster (f.eks. piletaster), er der ingen garanti. Derfor bør man være forsigtig, når man implementerer logik, der udelukkende er afhængig af disse events på tværs af alle enheder.

En Komplet Oversigt over Tastetyper

Her er en tabel, der opsummerer almindelige taster og deres tilknyttede key- og code-værdier:

Tastnavnevent.keyevent.codeBemærkninger
BackspaceBackspaceBackspace
TabTabTab
EnterEnterEnter
Shift (venstre/højre)ShiftShiftLeft / ShiftRightevent.shiftKey er sand
Ctrl (venstre/højre)ControlControlLeft / ControlRightevent.ctrlKey er sand
Alt (venstre/højre)AltAltLeft / AltRightevent.altKey er sand
EscapeEscapeEscape
MellemrumSpaceevent.key er et enkelt mellemrum
Pil opArrowUpArrowUp
Pil nedArrowDownArrowDown
Pil venstreArrowLeftArrowLeft
Pil højreArrowRightArrowRight
Bogstav Aa / AKeyAevent.key afhænger af Shift
Tal 00Digit0
F1F1F1
Windows/Cmd tastMetaMetaLeft / MetaRightevent.metaKey er sand
F1-F12F1-F12F1-F12
Semikolon (;);Semicolonevent.key kan variere i nogle browsere
Ligamedtegn (=)=Equalevent.key kan variere i nogle browsere

Bemærkninger:

  • event.code er altid med stort begyndelsesbogstav for taster som 'A', 'Z', osv. (f.eks. KeyA, ikke keyA).
  • For taster som ikke producerer et tegn (f.eks. Shift, F1), er event.key ofte identisk med event.code.
  • Der kan være små forskelle i event.key-værdier for visse symboltaster (f.eks. semikolon, ligamedtegn) på tværs af forskellige browsere.

Konklusion

Tastaturevents i JavaScript er et kraftfuldt værktøj til at skabe responsive og interaktive brugeroplevelser. Ved at mestre keydown og keyup, forstå forskellen mellem key og code, og undgå forældede egenskaber som keyCode, kan du bygge mere robuste og fremtidssikrede webapplikationer. Husk altid at overveje brugeroplevelsen, især i forbindelse med tastaturlayouts og tilgængelighed.

For at eksperimentere yderligere, kan du bruge online playgrounds som det, der henvises til i kildematerialet, for at udforske, hvordan forskellige taster og kombinationer udløser events og hvilke værdier deres egenskaber har.

Hvis du vil læse andre artikler, der ligner Mestre Tastaturevents i JavaScript, kan du besøge kategorien Teknologi.

Go up