首页 > 解决方案 > JS - 强制打印死键

问题描述

我需要在按下所有键时捕捉它们,包括死键(例如',^)并打印它们。我注意到,在正常情况下,只有在空格之后才会打印死键,因此它需要两个输入,“´”和“”才能产生“´”。由于我需要在第一次输入时打印它,我尝试手动触发空间,如下所示:

onKey: async function (event) {

...

  if (event.key === "Dead") {
    const fakeInput = new KeyboardEvent("keydown", {
      key: " ",
      view: global,
    });
  document.body.dispatchEvent(fakeInput);
  }

...

}

但这只会产生“”,它不包含死键。并且死键仍然在某个队列中,因为如果我按下下一个键,例如“a”,我会得到“á”。

我正在听“keydown”(这就是为什么我也试图伪造它),并且整个身体都在听:

document.body.onkeydown = (ev) => {
    this.onKey(ev);
};

那么我可以强制死键退出这个队列吗?还是有其他方法可以做到这一点?我希望我的问题很清楚,如果没有,我会尝试添加更多信息。

标签: javascripttypescripteventskeyboard-events

解决方案


用于将输入组合成字符的软件称为输入法编辑器(IME)。它在许多外语中被广泛用于生成单词字符,例如日语,用户可以将音节字符组合成汉字、平假名或片假名。

组合字符键盘的这一特性取决于在操作系统级别配置的键盘布局。

打印“死”键

从键盘事件(keydown等)来看,除了isComposing标志之外几乎没有什么信息,它告诉您用户是否正在编写组合字符。

介绍作曲事件!它允许您查看正在键入的组合字符。

将死键强制出队列

据我所知,无法从键盘输入“缓冲区”中删除死字符。您可以做的是过滤掉所有包含合成字符(´、`、^、~ 等)的字符,并将它们替换为“正常”字符。例如,过滤 é、ê 和 è 并打印一个 e。此解决方案可能适用于有限数量的组合字符。

来源


推荐阅读