2

キーが押されたときに、javascript で適切なキー/文字コードを特定しようとしています。CapsLock キーがオンの場合、小文字が検出されないようです。

Try the combinations:
1. a                 = a (97) shift:false
2. Shift+A           = A (65) shift:true
3. Capslock,A        = A (65) shift:false
4. Capslock, Shift+A = A (65) shift:true  -- this should be 'a'

ケース 2 と 4 は区別できません。

問題を説明するための簡単なフィドル。 http://jsfiddle.net/sramam/pet5G/3/

OUTPUT:
keypress 'a' shift:false charCode97 keyCode:97 which:97
keypress 'A' shift:true charCode65 keyCode:65 which:65
(CAPSLOCK ON)
keypress 'A' shift:false charCode65 keyCode:65 which:65
keypress 'A' shift:true charCode65 keyCode:65 which:65

私はこれを試すために MacPro(Lion) しか持っていません。正しくレンダリングされる文字を検出することさえ可能ですか?

4

3 に答える 3

2

キープレスコードは Windows で正しく、キープレスで印刷される文字の正しいキーコードを返します。

CAPS LOCK ON:

PRINTED 
CHARACTER       keyup/down      keypress    Modifiers
z               90              122         +Shift
a               65              97          +Shift
Z               90              90  
A               65              65

caps lock off:
Z               90              90          +Shift
A               65              65          +Shift
z               90              122 
a               65              97
于 2012-04-21T05:44:05.343 に答える
2

実際、キー押下検出は「正しい」ものです。あなたが直面している問題は、OS X Lion で、Caps Lock を有効にして Shift キーを押すと、Caps Lock が無視されることです。Windows では、Shift + Caps Lock は小文字を返します。Mac では、大文字が返されます。これは、ブラウザがキープレスをどのように解釈するかの問題ではなく、オペレーティング システムが登録するものです。

任意のアプリケーション、つまりターミナルで入力してみてください。私の言いたいことがわかるはずです。

これは、他の Mac OS バージョンにも当てはまる可能性があります。私は、OS X Lion を搭載した MacBook Air でこれをテストしました。

于 2012-04-21T05:47:29.513 に答える
0

keydown、keyup、および keypress イベントはすべてのブラウザーでサポートされていますが、イベント オブジェクトの keyCode プロパティの値が標準化されていないため、相互運用性の問題がいくつかあります。

// The legacy keyCode property of the keydown event object is not standardized
// But the following values seem to work for most browsers and OSes.
Keymap.keyCodeToKeyName = {
// Keys with words or arrows on them
8:"Backspace", 9:"Tab", 13:"Enter", 16:"Shift", 17:"Control", 18:"Alt",
19:"Pause", 20:"CapsLock", 27:"Esc", 32:"Spacebar", 33:"PageUp",
34:"PageDown", 35:"End", 36:"Home", 37:"Left", 38:"Up", 39:"Right", 40:"Down", 45:"Insert",  46:"Del",
// Number keys on main keyboard (not keypad)  
48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",
// Letter keys. Note that we don't distinguish upper and lower case 
65:"A", 66:"B", 67:"C", 68:"D", 69:"E", 70:"F", 71:"G", 72:"H", 73:"I", 74:"J", 75:"K", 76:"L", `   77:"M", 78:"N", 79:"O", 80:"P", 81:"Q", 82:"R", 83:"S", 84:"T", 85:"U", 86:"V", 87:"W", 88:"X", 89:"Y", 90:"Z",`

// Keypad numbers and punctuation keys. (Opera does not support these.)
96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9", 106:"Multiply", 107:"Add", 109:"Subtract", 110:"Decimal", 111:"Divide",
// Function keys
112:"F1", 113:"F2", 114:"F3", 115:"F4", 116:"F5", 117:"F6", 118:"F7", 119:"F8", 120:"F9", 121:"F10", 122:"F11", 123:"F12", 124:"F13", 125:"F14", 126:"F15", 127:"F16", 128:"F17", 129:"F18",  130:"F19", 131:"F20", 132:"F21", 133:"F22", 134:"F23", 135:"F24",
// Punctuation keys that don't require holding down Shift
// Hyphen is nonportable: FF returns same code as Subtract
59:";", 61:"=", 186:";", 187:"=", // Firefox and Opera return 59,61 188:",", 190:".", 191:"/", 192:"`", 219:"[", 220:"\\", 221:"]", 222:"'"
};
于 2012-04-21T05:49:12.873 に答える