javascript - 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);
};
那么我可以强制死键退出这个队列吗?还是有其他方法可以做到这一点?我希望我的问题很清楚,如果没有,我会尝试添加更多信息。
解决方案
用于将输入组合成字符的软件称为输入法编辑器(IME)。它在许多外语中被广泛用于生成单词字符,例如日语,用户可以将音节字符组合成汉字、平假名或片假名。
组合字符键盘的这一特性取决于在操作系统级别配置的键盘布局。
打印“死”键
从键盘事件(keydown
等)来看,除了isComposing
标志之外几乎没有什么信息,它告诉您用户是否正在编写组合字符。
介绍作曲事件!它允许您查看正在键入的组合字符。
将死键强制出队列
据我所知,无法从键盘输入“缓冲区”中删除死字符。您可以做的是过滤掉所有包含合成字符(´、`、^、~ 等)的字符,并将它们替换为“正常”字符。例如,过滤 é、ê 和 è 并打印一个 e。此解决方案可能适用于有限数量的组合字符。
来源
推荐阅读
- c# - .net core IActionResult 返回基类而不是派生类
- javascript - 如何将参数从 javascript 函数传递到另一个函数而不调用它?
- python-3.x - Python - Telnet 或 SSH 多个设备
- c++ - 避免堆栈溢出 C++
- mysql - 有没有办法使用logstash加入两个不同数据源(即Mysql和Postgres SQL)的数据库并将其索引到弹性搜索?
- java - 如何在 SpringBoot 中使用列表参数?
- python - 在 seaborn 中使用 sns.relplot.set 控制美学
- angular - 使用 fakeAsync 区域时如何为 ag-Grid 编写 Angular 测试?
- go - 服务器是否需要是指针
- postgresql - Postgres - 读取日期之前或之后的日期索引 (<, <=, >, >=)