jQuery事件Keypress:按下了哪个键? AZ,&@
在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)
这适用于AZ,但如果我按@我不会得到@我得到2?
想法?
您可以捕获三个键盘事件: keyup
, keydown
和keypress
。 前两个表现出你所观察到的方式,后者表现得像你想要的那样。
您需要了解密钥和与该密钥关联的字符之间的区别。
正如jQuery doco中所解释的那样(无可否认它是埋藏的), keyup
和keydown
事件给出了一个与键盘上实际物理键对应的keyCode,因此大写“A”和小写“a”将具有相同的代码,与“2”和“@”一样 – 但请注意,“W”上方的“2”键与数字键盘上的“2”键具有不同的代码。 event.shiftKey
属性将告诉您按下键时event.shiftKey
是否已关闭。 这两个事件还可以检查非文本类型的键,如箭头键,Ctrl,Home等。
另一方面, keypress
事件给出了与字符对应的keyCode,因此“A”和“a”将给出不同的keyCodes,“2”和“@”也是如此。 因此, keypress
可能更适合您的需求。
(顺便说一句,这不是一个jQuery的东西,即使使用“普通”JavaScript也是正常的行为,尽管jQuery试图在不同的浏览器中规范行为。一个这样的规范化是jQuery确保event.which
将工作一致,所以你应该使用event.which
来获取代码而不是event.keyCode
。)
这是符合您确切要求的小提琴
http://jsfiddle.net/cSc7r/
你可能不得不使用
String.fromCharCode(key_event.which);
要么
String.fromCharCode(event.keyCode); // For IE
但是如果你想在按键上运行任何事件,这里有一个很好的插件,可以很容易地实现。 请检查这个小提琴http://jsfiddle.net/zUc4Z/ 。
那是因为你按Shift + 2。 您需要检查Shift键是否也被按下。 看一下这个。
http://www.coldfusionjedi.com/index.cfm/2011/8/23/jQuery-Quickie–Noticing-ctrlshift-keyboard-events
不确定是否要在按下键时运行事件,但您可以尝试https://github.com/jeresig/jquery.hotkeys
否则,您可以检查代码中是否按下了shift键。 没有看到一个为你处理这个问题的图书馆