我有一个程序,无论用户使用什么键盘语言设置,我都需要在按下的键的javascript中获取键码。
这是我的代码:
JS:
window.addEventListener('keydown', function(e) {
console.log(e.keyCode);
// it works fine in all browsers, but in qwebview keycode == 0 in russian layout
});
的Python:
class View(QWebView):
def __init__(self, parent=None):
super(QWebView, self).__init__(parent)
def keyPressEvent(self, e):
print e.key() # same as in JS
print e.nativeScanCode() # ??
# QWebView.keyPressEvent(self, e)
答案 0 :(得分:1)
使用e.code
属性而不是e.keyCode
。例如,在美式或法文键盘上按第一个字母键(在法语中为A)将为您提供KeyQ
。
请注意,它在Edge上不起作用。截至2019年4月在版本18上进行了测试。
使用此网站进行测试:http://keycode.info
答案 1 :(得分:0)
e.which
和e.keyCode
均已弃用,因此应改用e.key
或e.code
:
KeyboardEvent
界面的key
只读属性返回用户按下的键的值,同时还要考虑修饰键的状态,例如 Shift 作为键盘的语言环境和布局。其值确定如下:
KeyboardEvent.code
属性表示键盘上的物理键(与按下键时生成的字符相反)。换句话说,此属性返回的值不会因键盘布局或修改键的状态而改变。
Support for e.key
is slightly better in older browsers,因此此版本可在Edge和IE的某些旧版本上使用。请记住,其中一些旧的浏览器使用了非标准代码,例如,左通常是'LeftArrow'
,右通常是'RightArrow'
,但是在IE中,它只是'Left'
和{{ 1}}。
此外,如果需要检查KeyboardEvent的属性值,例如'Right'
,e.key
,e.code
或e.which
,则可以使用https://keyjs.dev。我将很快添加有关此类跨浏览器不兼容性的信息!
免责声明:我是作者。