如何在使用SHIFT键时获取字符的keyCode?

19

如果通过键盘使用SHIFT输入字符,则只有keydownkeyup事件可以跟踪SHIFTkeyCode,即16。

那么如何跟踪实际打印的字符keyCode

我正在使用以下代码-

onkeyup='alert(event.keyCode)';// Always shows a message 16(keyCode of SHIFT) irrespective of the actual character
或者
onkeydown='alert(event.keyCode)';// Always shows a message 16(keyCode of SHIFT) irrespective of the actual character

那么如何获取实际打印字符的keyCode???


https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent - user2625787
@Jeffman:你真的认为你有答案回答我的问题吗? - Rajesh Paul
3个回答

29

你可以查看传递的事件对象的属性 shiftKey

看一下这个Fiddle

当您按下Shift时,您可以看到它的keyCode和 shiftKey 属性 true 。 一起按任何按钮,即Shift+A,控制台输出:

65
true

这是 A 的代码和 shiftKey 属性。


1
资源无用。你真的有任何解决方案吗? - Rajesh Paul
而且对我也很有帮助-谢谢!(我不知道Rajesh Paul是否意识到您必须打开控制台?) - Velojet
@Velojet 我认为他不喜欢那个答案的实际原因是因为他使用了alert作为事件处理程序。而alert只会打印第一个按下的键(或类似的内容,我曾经重现过一次,但现在记不清了)。 - Artyom Neustroev

12

得到解决方案了

我必须使用onKeyPress事件,该事件不把SHIFT视为按键,而是视为结果字符

因此,我可以使用onKeyPress事件获取实际结果字符的keyCode

语法:

onkeypress='alert(event.keyCode)';

现在如果我按下SHIFT+A,它会提示A键的keyCode,即65。


3
这对符号无效,就像Shift+1应该给你叹号一样。 - Curtis

2
作为另一种解决方案,您可以创建一个新的keydown事件侦听器,并创建一个if语句,其中包含e.shiftKey作为布尔值。如果返回true,则嵌套一个新的if语句e.which,它只会对符号返回true,而不是数字。
input.addEventListener('keydown', e => {
  if(e.shiftKey)
    if(e.which == 52){
      // will only return the value of dollar sign ($) not a number 4
    }
})

参考文献:https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/shiftKey


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接