Element: keyup event

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

The keyup event is fired when a key is released.

The keydown and keyup events provide a code indicating which key is pressed, while keypress indicates which character was entered. For example, a lowercase "a" will be reported as 65 by keydown and keyup, but as 97 by keypress. An uppercase "A" is reported as 65 by all events.

The event target of a key event is the currently focused element which is processing the keyboard activity. This includes: <input>, <textarea>, anything that is contentEditable, and anything else that can be interacted with the keyboard, such as <a>, <button>, and <summary>. If no suitable element is in focus, the event target will be the <body> or the root. The event bubbles. It can reach Document and Window.

The event target might change between different key events. For example, the keydown target for pressing the Tab key would be different from the keyup target, because the focus has changed.

Syntax

Use the event name in methods like addEventListener(), or set an event handler property.

js
addEventListener("keyup", (event) => { })

onkeyup = (event) => { }

Event type

A KeyboardEvent. Inherits from UIEvent and Event.

Event UIEvent KeyboardEvent

Examples

addEventListener keyup example

This example logs the KeyboardEvent.code value whenever you release a key inside the <input> element.

html
<input placeholder="Click here, then press and release a key." size="40" />
<p id="log"></p>
js
const input = document.querySelector("input");
const log = document.getElementById("log");

input.addEventListener("keyup", logKey);

function logKey(e) {
  log.textContent += ` ${e.code}`;
}

keyup events with IME

Since Firefox 65, the keydown and keyup events are now fired during Input method editor composition, to improve cross-browser compatibility for CJKT users (Firefox bug 354358). To ignore all keyup events that are part of composition, do something like this:

js
eventTarget.addEventListener("keyup", (event) => {
  if (event.isComposing) {
    return;
  }
  // do something
});

Note: Unlike keydown, keyup events do not have special keyCode values for IME events. However, like keydown, compositionstart may fire after keyup when typing the first character that opens up the IME, and compositionend may fire before keyup when typing the last character that closes the IME. In these cases, isComposing is false even when the event is part of composition.

Specifications

Specification
UI Events
# event-type-keyup
HTML
# handler-onkeyup

Browser compatibility

See also