此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

Element:compositionend 事件

基线 广泛可用

自 2015年7月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

compositionend 事件在诸如输入法编辑器之类的文本组合系统完成或取消当前组合会话时,会在该元素上触发。

例如,用户使用汉语拼音输入法编辑器完成输入一个汉字后,可能触发此事件。

语法

在诸如 addEventListener() 等方法中使用事件名称,或设置事件处理器属性。

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

oncompositionend = (event) => { }

事件类型

CompositionEvent。继承自 UIEventEvent

Event UIEvent CompositionEvent

示例

js
const inputElement = document.querySelector('input[type="text"]');

inputElement.addEventListener("compositionend", (event) => {
  console.log(`生成的字符为:${event.data}`);
});

运行实例

HTML

html
<div class="control">
  <p>先选中文本框,然后打开输入法:</p>
  <ul>
    <li>在 macOS 上按 <kbd>option</kbd> + <kbd>`</kbd></li>
    <li>在 Windows 上按 <kbd>windows</kbd> + <kbd>.</kbd></li>
  </ul>
  <label for="example">示例输入</label>
  <input type="text" id="example" name="example" />
</div>

<div class="event-log">
  <label for="eventLog">事件日志:</label>
  <textarea
    readonly
    class="event-log-contents"
    rows="8"
    cols="25"
    id="eventLog"></textarea>
  <button class="clear-log">清除</button>
</div>

JavaScript

js
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);

结果

规范

规范
UI Events
# event-type-compositionend

浏览器兼容性

参见