This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
The compositionupdate event is fired when a new character is received in the context of a text composition session controlled by a text composition system such as an input method editor.
For example, this event could be fired while a user enters a Chinese character using a Pinyin Input method editor.
Use the event name in methods like addEventListener(), or set an event handler property.
addEventListener("compositionupdate", (event) => { })
oncompositionupdate = (event) => { }
A CompositionEvent. Inherits from UIEvent and Event.
This interface also inherits properties of its parent, UIEvent, and its ancestor — Event.
CompositionEvent.data Read only
Returns the characters generated by the input method that raised the event; its varies depending on the type of event that generated the CompositionEvent object.
CompositionEvent.locale Read only Deprecated
Returns the locale of current input method (for example, the keyboard layout locale if the composition is associated with IME).
const inputElement = document.querySelector('input[type="text"]');
inputElement.addEventListener("compositionupdate", (event) => {
console.log(`generated characters were: ${event.data}`);
});
<div class="control">
<label for="example">
First select textbox, then to open IME:
<ul>
<li>on macOS type <kbd>option</kbd> + <kbd>`</kbd></li>
<li>on Windows type <kbd>windows</kbd> + <kbd>.</kbd></li>
</ul>
</label>
<input type="text" id="example" name="example" />
</div>
<div class="event-log">
<label for="eventLog">Event log:</label>
<textarea
readonly
class="event-log-contents"
rows="8"
cols="25"
id="eventLog"></textarea>
<button class="clear-log">Clear</button>
</div>
const inputElement = document.querySelector('input[type="text"]');
const log = document.querySelector(".event-log-contents");
const clearLog = document.querySelector(".clear-log");
clearLog.addEventListener("click", () => {
log.textContent = "";
});
function handleEvent(event) {
log.textContent += `${event.type}: ${event.data}\n`;
}
inputElement.addEventListener("compositionstart", handleEvent);
inputElement.addEventListener("compositionupdate", handleEvent);
inputElement.addEventListener("compositionend", handleEvent);
| Specification |
|---|
| UI Events> # event-type-compositionupdate> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
compositionupdate_event |
18 | 12 | 9 | 15 | 5 | 18 | 9 | 14 | 5 | 1.0 | 4.4 | 5 |
compositionstart, compositionend.
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Element/compositionupdate_event