5

我一直在对 Javascript 键事件(keyupkeydownkeypress)进行一些研究,并得出结论,在尝试确定用户按下了哪些键时,每个事件都有其优点和缺点。

通过使用jQuery 提供的event.which,似乎onkeypress将提供区分大小写的字符代码。即 AZ 为 65-90,AZ 为 97-122。但是,方向键等特殊键不会触发 onkeypress。然而,它们会触发keyup /*keydown*,但不会提供区分大小写的代码。

是否存在一种“两全其美”的解决方案,可以同时提供区分大小写和特殊键检测,而无需手动同时监视多个事件?

4

2 回答 2

1

监听 keyup 事件时

$(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)、shifKey、altKey、ctrlKey。例子:如果你按 shift+箭头向右,你会得到 keyCode:3, shiftKey:true。

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

}

希望这可以帮助。

于 2013-05-07T13:29:25.363 回答
0

您可以尝试THREx.KeyboardState.js。尽管此库用于 JS 游戏,但它在您的情况下可能很有用。

于 2013-05-07T14:11:44.967 回答