[在Mac OS X的Chrome和Firefox中,按住Command键(即Meta键)时,Shift键似乎并不影响KeyboardEvent.key
属性的大写。这可以通过在event.key
事件中记录keydown
来测试:
document.addEventListener("keydown", event => console.log(event.key));
按住Command-Shift-Z会产生"z"
。按住Control-Shift-Z之类的其他修饰符会产生预期的"Z"
。在其他操作系统中,这似乎没有发生:按住Shift总是将一个字母大写。
这是预期的行为吗?如果是,背后的原因是什么?我在spec中找不到任何提及。如果不希望出现这种情况,则可能是什么原因导致这种行为?
是,这是预期的行为。
[键盘事件key
属性应该是键表示的字符是字符(键盘的实际字符取决于语言环境)-或对于Meta
之类的修饰键,来自标准非Unicode列表)标准中3.2 Modifier keys下列出的关键名称。
按照标准,对于Apple命令或Windows徽标键激活事件,应始终获得“ Meta”作为key
值。
如果在按住meta键的同时按下了其他某个键,则另一个键的键盘事件应设置为metaKey
属性。在按下meta键的同时按住Shift键也有类似的考虑-meta key事件应设置其shiftKey
属性。
UIEvents specification的4.6.1节中描述了便利属性:
...:ctrlKey,shiftKey,altKey,metaKey。这些属性等效于分别将getModifierState()方法与Control,Shift,Alt或Meta一起使用。