jQuery事件Keypress:按下了哪个键? A-Z,& @

时间:2011-11-02 04:02:54

标签: javascript jquery

在keydown上我从jQuery获得以下内容:

jQuery.Event
altKey: false
attrChange: undefined
attrName: undefined
bubbles: true
button: undefined
cancelable: true
charCode: 0
clientX: undefined
clientY: undefined
ctrlKey: false
currentTarget: HTMLDivElement
data: undefined
detail: 0
eventPhase: 2
fromElement: undefined
handleObj: Object
handler: function () {
isDefaultPrevented: function returnFalse() {
jQuery16106168975948821753: true
keyCode: 51
layerX: 0
layerY: 0
metaKey: true
newValue: undefined
offsetX: undefined
offsetY: undefined
originalEvent: KeyboardEvent
pageX: 0
pageY: 0
prevValue: undefined
relatedNode: undefined
relatedTarget: undefined
screenX: undefined
screenY: undefined
shiftKey: false
srcElement: HTMLDivElement
target: HTMLDivElement
timeStamp: 1320206454048
toElement: undefined
type: "keydown"
view: DOMWindow
wheelDelta: undefined
which: 51
__proto__: Object

如何获得按下的键?我试过了:

 String.fromCharCode(e.keyCode)

这适用于A-Z,但是如果我按@我不会得到@我得到2?

想法?

4 个答案:

答案 0 :(得分:8)

您可以捕获三个键盘事件:keyupkeydownkeypress。前两个表现的方式与您观察的方式相同,后者的行为与您想要的方式相同。

您需要了解密钥与与该密钥关联的字符之间的区别。

正如jQuery doco中所解释的那样(诚然它有点埋没),keyupkeydown事件给出了一个与键盘上实际物理键对应的keyCode,所以大写“A”和小写“a”将具有相同的代码,“2”和“@”也是如此 - 但请注意,“W”上方的“2”键与数字上的“2”键具有不同的代码键盘。 event.shiftKey属性将告诉您按下该键时切换是否已关闭。这两个事件还可以检查非文本类型的键,如箭头键,Ctrl,Home等。

另一方面,keypress事件给出了与字符对应的keyCode,因此“A”和“a”将给出不同的keyCodes,“2”和“@”也是如此。 所以keypress可能更适合您的需求。

(顺便说一句,这不是jQuery的事情,即使使用“普通”JavaScript,这也是正常的行为,尽管jQuery试图在不同的浏览器中规范化行为。一个这样的规范化是jQuery确保{{ 1}}将始终如一地工作,因此您应该使用event.which来获取代码,而不是event.which。)

答案 1 :(得分:2)

这是符合您确切要求的小提琴 http://jsfiddle.net/cSc7r/

您可能必须使用

  String.fromCharCode(key_event.which);

  String.fromCharCode(event.keyCode); // For IE

但是如果你想在按键上运行任何事件,这里是一个很好的插件,可以很容易地使用它。请检查这个小提琴http://jsfiddle.net/zUc4Z/

答案 2 :(得分:0)

那是因为你按Shift + 2。您需要检查Shift键是否也被按下。看看这个。

http://www.coldfusionjedi.com/index.cfm/2011/8/23/jQuery-Quickie--Noticing-ctrlshift-keyboard-events

答案 3 :(得分:0)

不确定是否要在按下按键时运行事件,但您可以尝试 https://github.com/jeresig/jquery.hotkeys

否则,您可以检查代码中是否按下了shift键。没有看到一个为您处理此问题的图书馆