0

javascript に奇妙な問題が発生しています。または、javascript が初めてであることが原因である可能性があります。

onkeypressの場合に何らかのアクションを許可しようとしていますが、英数字または特殊文字が押された場合のみです。これは私のコードです:

if(e.keyCode>=32 && e.keyCode<=126 ){
    alert(e.keyCode);}
}

{,]>.ここに何か欠けているような特殊文字キーを押しても警告しませんか?

4

4 に答える 4

1

whichほとんどのブラウザとkeyCodeIEでのみプロパティを使用する必要があります。正しいイベントがありkeypressます。物理的なキーが押されるのではなく、入力された文字に関心がある場合にのみ発生します。

これが私のお気に入りのリファレンスです:http://unixpapa.com/js/key.html

document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    var charTyped = String.fromCharCode(charCode);

    alert("Character typed: " + charTyped);
};
于 2013-01-28T13:36:11.587 に答える
1

keyCodeで ASCII インデックスが得られると想定しましたが、そうではありません。この仮定により、範囲基準は正しくありません。

MDN 言います:

イベントでは、keypress押されたキーの Unicode 値がkeyCodeまたはcharCodeプロパティのいずれかに保存されますが、両方には保存されません。押されたキーが文字 (たとえば 'a') を生成するcharCode場合、大文字と小文字を区別して、その文字のコードに設定されます。(つまりcharCode、シフト キーが押されているかどうかが考慮されます)。それ以外の場合、押されたキーのコードは に格納されkeyCodeます。

keyCodekeydown および keyup イベントで常に設定されます。このような場合、charCode は設定されません。

keyCodeキーがまたはに格納されているかどうかに関係なく、キーのコードを取得するにはcharCode、 which プロパティをクエリします。

特定のキーに関連付けられた keyCode 値のリストについては、例 7: イベント オブジェクト定数の表示の例を実行し、結果の HTML テーブルを表示します。

指示どおりに実行すると、「特別な」文字の一部が指定した範囲の制限外にあることがわかります。

ケビンもこの便利な表を指摘しましたが、キープレス処理にはより標準的なアプローチを 使用することをお勧めします。

于 2013-01-28T13:28:05.140 に答える
1

keyCodeコンマ ( ) のは,188 です。これが理由でしょうか?

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

于 2013-01-28T13:18:16.233 に答える
0

を使用する必要がありますwhich。Firefox と Chrome の両方で動作するはずです。

これを試して:

document.onkeypress = function(e) {
    console.log(e.keyCode + " -- " + e.which + " -- " + e.charCode);

    if(e.which >= 32 && e.which <= 126 ){
        alert(e.which);
    }
};
于 2013-01-28T13:49:25.263 に答える