2012-02-04 4 views
1

次のコード(jQueryを使用)を押して、押されたキーを表示しました。javascriptのkeycodeとfromCharCode

$(window).keydown(function(e){ 
    $("div").text("Key:" + String.fromCharCode(e.keyCode).toLowerCase()); 
    return false; 
}); 

このコードは、通常のアルファベット文字(E、W、Q、R ...)で動作します。 しかし、( ''のような)非アルファベットキーを押すと、間違った文字が表示されます。

例: '' - >¼、 ']' - > yで

私のコードが悪いのか?

答えて

8

keypressイベントとe.whichプロパティを使用してください。

jQueryはキーコードを正規化し、変数をevent.whichに保存します。 keypressイベントのwhichプロパティは、String.fromCharCodeの唯一の信頼できる値です。

event.keyCodeプロパティは、event.charCodeまたはevent.whichプロパティと異なる場合があります。

印刷不可能な文字の場合、event.whichは0の値を持ち、event.keyCodeとは異なります。だからあなたは奇妙なキャラクターを見ているのです。

$(window).keypress(function(e) { 
    var charCode = e.which; 
    if (!charCode) { // <-- charCode === 0 
     return;// return false, optionally 
    } 
    $("div").text("Key:" + String.fromCharCode(charCode).toLowerCase()); 
    return false; // Or e.preventDefault(); and/or e.stopPropagation() 
}).keyup(function(e) { 
    // Key is lifted, do something 
}); 
+0

しかし、キーがダウンしているかどうかを知りたいので、キーダウンとキーアップイベントを使用する必要があります。 –

+0

@fishpotato 'keypress'は' keydown'イベントの直後に起動されます。あなたのコードのアプリケーションは何ですか? –

+0

シンセサイザーを書いています。私はキーの状態で音をオン/オフしたいと思います。 –

関連する問題