一开始我想<input type="text">
实时监控 a 的变化(例如,当用户按下一个键时)。该onChange
事件不起作用,因为它仅在用户按下 Enter 或从输入元素移除焦点时触发。然后我在 StackOverflow 上看到了这个问题。我尝试了该答案中的代码,但问题是我不想收到不代表可打印字符的按键的通知,因此我必须以这种方式对其进行修改以使其验证事件中是否有可打印字符:
...
textInputElement.onKeyDown.listen((KeyboardEvent ev) {
if (new String.fromCharCode(ev.keyCode).length > 0) {
callAFunction();
}
});
...
(+onKeyUp
事件的相同更改)
当我在 Dartium 中对此进行测试时,我看到通过聚焦输入元素然后按任意键,keydown
会触发一个事件ev.keyCode = ev.which = 229
and ev.charCode = 0
。keydown
在此事件之后,立即触发另一个事件ev.keyCode = ev.which
,按下的键和正确ev.charCode = 0
。我不明白这个 229 键是从哪里来的,但我看到它是一个可打印的字符,å
. 我在网上搜索,发现其他人也有这个问题,有时他们正在使用其他编程语言和技术。一个相关的链接是这个,选择的修复是在这个非常小的提交中——他们选择忽略所有具有keyCode = 229
解释说最近版本的 Chrome/Chromium/WebKit 开始在每个标准键盘事件之前发送这些 keydown 事件,它们的含义是用户按下了某个按钮。但输入法仍在处理,或者输入法编辑器正在处理按键输入。
我的问题是,如果返回可打印字符“ ”可以忽略keydown
事件吗?我想到了可能的情况,即拥有一个产生相同键码及其对应字符的真实键。keyCode = 229
new String.fromCharCode(229)
å
我感谢您的任何帮助!