【发布时间】:2014-07-30 18:09:26
【问题描述】:
一开始我想实时监控<input type="text"> 的变化(例如,当用户按下某个键时)。 onChange 事件不起作用,因为它仅在用户按下 Enter 或从输入元素移除焦点时触发。然后我在 StackOverflow 上看到了this question。我尝试了该答案中的代码,但问题是我不想收到不代表可打印字符的按键通知,因此我必须以这种方式对其进行修改以使其验证事件中是否有可打印字符:
...
textInputElement.onKeyDown.listen((KeyboardEvent ev) {
if (new String.fromCharCode(ev.keyCode).length > 0) {
callAFunction();
}
});
...
(+onKeyUp 事件的相同更改)
当我在 Dartium 中对此进行测试时,我看到通过聚焦输入元素然后按任意键,keydown 事件会被ev.keyCode = ev.which = 229 和ev.charCode = 0 触发。紧接着这个事件之后,另一个keydown 事件被正确的按下键的ev.keyCode = ev.which 和ev.charCode = 0 触发。我不明白这个 229 键是从哪里来的,但我看到它是一个可打印的字符,å。我在网上搜索,发现其他人也有这个问题,有时他们正在使用其他编程语言和技术。一个相关链接是this,而选择的修复程序是this very small commit - 他们选择忽略所有具有keyCode = 229 的事件,并解释说最近版本的Chrome/Chromium/WebKit 开始在每个标准键盘之前发送这些按键事件事件,它们的含义是用户按下了某个按钮。但输入法仍在处理或输入法编辑器正在处理按键输入。
我的问题是,如果new String.fromCharCode(229) 返回可打印字符“å”,是否可以忽略带有keyCode = 229 的keydown 事件?我想到了可能有一个真正的钥匙产生相同的钥匙代码及其对应字符的情况。
感谢您的任何帮助!
【问题讨论】:
-
这不是直接回答您的问题,但您可以使用“输入”事件来确定文本框的值何时(且仅何时)更改。见developer.mozilla.org/en-US/docs/Web/Events/input。
标签: javascript events dart keyboard-events dartium