Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript事件中捕获特殊键和键大小写_Javascript_Jquery_Keycode - Fatal编程技术网

在Javascript事件中捕获特殊键和键大小写

在Javascript事件中捕获特殊键和键大小写,javascript,jquery,keycode,Javascript,Jquery,Keycode,我已经对Javascript键事件(keyup、keydown、keypress)做了一些工作,并得出结论,在试图确定用户按下了什么键时,每种事件都有各自的优点和缺点 通过使用jQuery提供的as,onkeypress似乎将提供区分大小写的字符代码。i、 e.A-Z为65-90,A-Z为97-122。但是,诸如方向键之类的特殊键不会触发onkeypress。但是,它们会触发keyup/*keydown*,但不会提供区分大小写的代码 是否存在一个“两全其美”的解决方案,该解决方案将同时提供区分大

我已经对Javascript键事件(keyup、keydown、keypress)做了一些工作,并得出结论,在试图确定用户按下了什么键时,每种事件都有各自的优点和缺点

通过使用jQuery提供的as,onkeypress似乎将提供区分大小写的字符代码。i、 e.A-Z为65-90,A-Z为97-122。但是,诸如方向键之类的特殊键不会触发onkeypress。但是,它们会触发keyup/*keydown*,但不会提供区分大小写的代码


是否存在一个“两全其美”的解决方案,该解决方案将同时提供区分大小写和特殊的密钥检测,而不需要手动同时监控多个事件?

在侦听密钥更新事件时

$(document).on('keyup', on_key_up);

function on_key_up(event)
{
    console.log('keycode:',event);      
}
我将此记录为:

altKey: false
bubbles: true
cancelable: true
char: undefined
charCode: 0
ctrlKey: false
currentTarget: document
data: undefined
delegateTarget: document
eventPhase: 3
handleObj: Object
isDefaultPrevented: function ot(){return!1}
jQuery19106670567644760013: true
key: undefined
keyCode: 69
metaKey: false
originalEvent: KeyboardEvent
relatedTarget: undefined
shiftKey: false
target: body
timeStamp: 1367933052234
type: "keyup"
view: Window
which: 69
您需要keyCode(本例中为69)、shiffkey、altKey和ctrlKey。 示例:如果按shift+向右箭头键,您将得到keyCode:3,shiftKey:true

function on_key_up(event)
{
if(event.shiftKey) // action

}

希望这有帮助。

您可以试试。虽然此库用于JS游戏,但在您的情况下可能会很有用。

简短回答,不,您必须至少听两个事件才能同时获得这两个事件。较长的答案是倾听换档/控制事件,并在此基础上找出具体情况。您可以查找e.shiftKey on keydown/up事件,该事件将击中大写字母。一个问题是当使用CAPS lock时,键应该是大写的,没有shiftKey。是的,但是字母大小写之间没有区别。在您的示例中,我无法区分由于大写锁定而输入的“e”(代码69)和“e”(再次代码69)之间的区别,也无法区分由于大写锁定+移位而输入的“e”之间的区别。