我需要在按下所有键(包括“死”键(例如´,^))时捕获它们并进行打印。我注意到,在正常情况下,只有在后面加上例如空间,因此需要两个输入“´”和“”来产生“´”。由于我需要在第一个输入上打印它,因此我尝试手动触发该空间,如下所示:

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


那么我可以强制将死键移出该队列吗?还是有其他方法可以做到?我希望我的问题很清楚,否则,我将尝试添加更多信息。

最佳答案

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

组合字符的键盘的此功能取决于在OS级别配置的键盘布局。

打印“死”键

在键盘事件(keydown等)中,除isComposing标志外,几乎没有其他信息,该标志会告诉您用户是否正在编写组合字符。

介绍作文活动!它使您可以查看正在键入的组成字符。

强制将死键移出队列

据我所知,不可能从键盘输入“缓冲区”中删除无效字符。您可以做的是过滤掉包含合成字符(´,`,^,〜等)的所有字符,然后将其替换为“普通”字符。例如,过滤é,ê和è并打印e。对于有限数量的合成字符,此解决方案可能会很好。

资料来源


https://en.wikipedia.org/wiki/Input_method
https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
https://developer.mozilla.org/sv-SE/docs/Web/API/KeyboardEvent/key/Key_Values#IME_and_composition_keys
https://w3c.github.io/uievents/#events-compositionevents

09-27 21:43