65

keyCode入力可能な文字に対応するJavaScript の範囲を知りたいだけです。または、バックスペース、エスケープ、コマンド、シフトなどの入力不可能な (制御) 文字の範囲を無視できるようにします。

私が尋ねる理由は、呼び出しString.fromCharCode()がコントロールキーの奇妙な文字になることです。たとえば、左コマンドの場合は「[」、左矢印の場合は「%」を取得します。そのような奇妙さ。

4

6 に答える 6

96

Keydownは、変更なしで、押されたキーのkeyCodeを提供します。

$("#keypresser").keydown(function(e){
    var keycode = e.keyCode;

    var valid = 
        (keycode > 47 && keycode < 58)   || // number keys
        keycode == 32 || keycode == 13   || // spacebar & return key(s) (if you want to allow carriage returns)
        (keycode > 64 && keycode < 91)   || // letter keys
        (keycode > 95 && keycode < 112)  || // numpad keys
        (keycode > 185 && keycode < 193) || // ;=,-./` (in order)
        (keycode > 218 && keycode < 223);   // [\]' (in order)

    return valid;
});

String.fromCharCodeUnicode値を使用するため、数字キー、文字キー、およびスペースバーのみに相関するキーコードがあります。

Keypressは、入力されたテキストのcharCode表現になります。キーを押した結果としてテキストが「印刷」されない場合、このイベントは発生しないことに注意してください。

$("#keypresser").keypress(function(e){
    var charcode = e.charCode;
    var char = String.fromCharCode(charcode);
    console.log(char);
});

http://jsfiddle.net/LZs2D/1/これらがどのように機能するかを示します。

KeyUpはKeyDownと同様に動作します。

于 2012-09-17T21:50:45.770 に答える
21

背景として、「keypress」イベントは、文字キーを押すたびにcharCodeプロパティを提供します。

Editor.addEventListener('keypress', function(event){
    if (event.charCode) {
        //// character key
        console.log( String.fromCharCode(event.charCode) ); /// convert charCode to intended character.
    } else {
        //// control key
    }

ただし、「keypress」イベントはすべてのキーストロークをキャプチャするわけではありません。「keypress」イベントの前にいくつかのキーが起動します。

対照的に、「keydown」イベントはすべてのキーストロークをキャプチャしますが、 charCodeプロパティはありません。では、それが文字キーかどうかはどうすればわかりますか? keyCodeが複数の範囲の下限と上限内にあるかどうかをすべてのキー ストロークでチェックすることは、最適な効率ではありません。ASCII 範囲外の文字にも問題があると思われます。

私のアプローチは、イベントの「キー」プロパティの長さを確認することです。「key」プロパティは、どのキーが押されたかを判断するための「keyCode」の代替です。コントロールキーの場合、"key" プロパティは説明です(例: "rightArrow"、"F12"、"return" など)。文字キーの場合、文字キーの「key」プロパティは単なる文字(「a」、「A」、「~」、「\」など) です。したがって、すべての文字キーについて、「キー」プロパティの長さは 1 になります。一方、制御文字の長さは 1 より大きくなります。

Editor.addEventListener('keydown', function(event){
    if (event.key.length == 1){ 
        //// character key
    } else {
        //// control key
    }
})
于 2018-04-02T13:39:40.460 に答える
4

この記事には、次のリストがありkeyCodesますJavascript

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

于 2012-09-17T21:21:11.330 に答える