1
4
问题是,此时此刻,你永远无法从浏览器中了解键盘布局,你只能猜测。有多种方法可以尝试某种检测,但它们总是很复杂,不是现成的解决方案。 然而,您可以做一些事情来确定按下了什么键。 因此,Keydown将为您提供(假设事件对象为e): e、 代码 :保存标识正在按下的物理键的字符串。值为 不受当前键盘布局或修改器状态的影响 ,因此特定键将 总是 返回相同的值。(来自mozilla.org) e、 密钥 :事件表示的键的键值。如果该值具有打印的表示形式,则该属性的值与 烧焦 属性 e、 其中 和 e、 键代码 :虽然已弃用,但将为您提供键盘上键的位置代码,如果e.charCode为0,则这是位置代码(如果<256)或unicode(这意味着键盘以另一种语言切换) 现在棘手的是 e、 密钥 实际上代表 unicode 字符,如果它是可打印的,并且不是来自美国键盘,并且不是特殊键。您可以将此字符转换为十进制数并检查值。如果是unicode字符,则其十进制值将等于which和keyCode值。如果是和普通ASCII,则其小写值将等于which和keyCode值。此外,在执行此操作(转换)之前,您可以检查e.key是一个字符串(如Control、Alt、CapsLock等)还是一个字符(如a、b、c等),因此如果它是一个字符,那么您可以转换它。 所有这些都会让您知道按下了哪个键,以及这个键的本机可打印字符是什么。我没有德语、意大利语或其他键盘要测试,但你明白了。 哦,如果你担心 转移 + 3. 产生“§”或“#”,您应该始终将该组合表示为Shift+3,无论它产生的字符是什么,更不用说将通过以下组合产生相同的字符 Ctrl键 + 转移 + 3. . 你只需要担心字母字符,但我相信我给了你检查的方法。 此外,我相信您可能不需要 e、 其中 和 e、 键代码 ,因为 e、 密钥 应该给你一切。 |
2
2
我认为你的问题不是问题,只是对问题的错误分析,你已经有了答案!
你说你想定义
人类可读的快捷方式
而你拒绝了
问题是“ 什么是人类可读的? ".
紧迫的
但如果用户按下
在我的法语键盘上,我有一个键
我可以使用keydown事件来截取Ctrl+和Ctrl+2(=Ctrl+Shift+2),没有问题。
我认为您可以使用keydown事件来拦截
如果您的目标是独立于键盘布局截取SHIFT+数字键 ,您可以添加一些Javascript代码来为数字键创建一些异常(或过滤器)( 但只有数字键 ),我认为没有必要使用其他钥匙。
在这种情况下,您可以考虑
在任何情况下,都不必知道键盘的布局。 目前,我使用法语/法语、法语/比利时、法语/瑞士和美国/美国键盘(或Tastatur),20年前,我在使用MFC编写C++ActiveControl时遇到了同样的问题。 如果我的回答对你来说不够好,你能举一些例子,这样我就可以帮助你处理这个新的具体案例。 |
3
2
与其重新发明轮子,我宁愿使用已经实现了这一点的跨浏览器库 https://github.com/ccampbell/mousetrap 我无法将完整的JavaScript粘贴到这里,以避免出现仅链接的答案,因为JS超过了允许的字符数限制。 |
Pikachu620 · 可以对事件列表进行排序吗? 2 年前 |
makerbaker · 取消选中框Javascript后重置输入值? 2 年前 |
sam_rox · 在Matlab ODE中使用事件内部的两个条件 6 年前 |
Santosh · javafx中的按键事件 6 年前 |
KarLito · 删除或切换Highcharts上的事件 6 年前 |
JWoods4 · 读取击键并放入文本框 6 年前 |
Everett Kaser · 在事件处理程序中绘制到NSView 6 年前 |