2011-01-25 6 views
4

私はOnKeyDownイベントに関する質問があります。 OnKeyDownイベントはKeyCodeを与えますが、どのようなコードが与えられているのか正確にはわかりません。基本的には、String.FromCharCodeメソッドを使用して、私がASCIIコードであると思ったものから実際の文字を取得していました。私は数字で数字を試してみるまでうまくいきました。 'w'の上にあるキーを使って '2'を入力してもOKですが、数字パッドから '2'を入力するとKeyCodeは98(b 'Asciiコード)になります。OnKeyDownとString.FromCharCode

私はこれを見ていたpageと同じ問題があります。この例では、ユーザーが数字を入力しないようになっています。最初の文字の上にある数字(より良い名前がないため)の上に完全に問題なく動作しますが、数字パッドを使用して数字を入力できます。

あなたは問題が何であるか考えていますか? (これは本当にASCIIコードのですか?私は間違ったイベントを使用しています?)...

THX ...

+0

すべての回答をいただきありがとうございますが、私はOnKeyDownのみを提供するエディタが提供するコンポーネントを使用しています...私は嫌です。私はw3schoolが悪いことを知らなかった... – LB40

+0

あなたはonkeydownをうまく使うことができます。理想的ではありません。しかし、あなたがイベントオブジェクトを持っているならevent.whichを取得することができます。あなたが望むならば、あなたはkeylocationを取得して、numpadを完全にブロックすることができます。 – Raynos

+0

私はイベント全体を持っていませんが、keyCodeとboolだけがコントロールを押してシフトを押しただけです。 – LB40

答えて

7

ではなくonkeypressを使用します。

onkeypress="return PreventDigits(event);" 
... 
function PreventDigits(evt) { 
    evt = evt || window.event; 
    var keyCode = evt.keyCode || evt.which;7 
    var num = parseInt(String.fromCharCode(keyCode), 10); 
    return isNaN(num); 
} 

ライブ例:クロームが持っている(少なくともv.10.0、)http://jsfiddle.net/yahavbr/vwc7a/

3

番号は以下に定義hereとして設定するキーコードマップから返されました。このセットはASCIIに対応していませんが、いくつかの点では似ています。私は見て、数字から文字を取得する方法についての詳細を見つけることができるかどうかを確認します。

はまた、私はあなたの代わりにe.keyCode

e.whichを使用し、さらにコメントとしてW3Schoolsのを信頼したことがないお勧めします。

e.originalEvent.keyIdentifierをご覧ください。これにはいくつかのユニコードが含まれているようです。しかし、それはまだ0〜9の代わりに数字パッドをA〜Hにマップします。私はそれが単に数字を嫌うと思う。どこかでboolean isnumpadフラグがあるはずです。 DOM3 APIにはブール値の数値があります。

数値パッドで1を押すとe.originalEvent.keyLocation === 3が表示されます。

定数KeyboardEvent.DOM_KEY_LOCATION_STANDARDの値が0x00であるKeyboardEvent.DOM_KEY_LOCATION_STANDARD

W3 specから。 KeyboardEvent.DOM_KEY_LOCATION_LEFT 定数KeyboardEvent.DOM_KEY_LOCATION_LEFTの値は0x01です。 KeyboardEvent.DOM_KEY_LOCATION_RIGHT 定数KeyboardEvent.DOM_KEY_LOCATION_RIGHTの値は0x02です。定数KeyboardEvent.DOM_KEY_LOCATION_NUMPADの KeyboardEvent.DOM_KEY_LOCATION_NUMPAD 値が0x03の

のでkeylocation === 3マップはあなたの手で、その後テンキーをキャッチしているつもりDOM_KEY_LOCATION_NUMPADすることです。テンキーは0-9

[ビッグ免責事項]

これはFF &クロムは何をすべきかであるに-Hをマップするためにあなたがキーコードから48を引くことができます。神はIEが何をしているか知っています。あなたは自分自身でその獣を征服することができます。私はW3仕様とはまったく異なる何かをしていることは間違いありません。

3

keyCodeおよびcharCodeは異なる動物である。 keyCodeはキーボードとキーロアアウトに関係しますが、charCodeは実際にはアスキー文字コードを与えます。

さらに、キーイベントのさまざまな実装には多くの問題があります。私はいつも良い情報源としてこのページを気に入っ:http://unixpapa.com/js/key.html

編集:レイノスが言うように、それは、Googleの検索で起動したとき、W3Schoolsのをスキップします。数字を防ぐために

0

FFは、イベントプロパティ "originalEvent.KeyLocation" を持っていません。 テキストフィールドが数値の場合はとすると、このJSコードを使用して数字の数字を認識することができます。これは完全にクロスブラウザでもあります:

var my_char=e.which; 
if(e.which>95 && e.which<106){ 
    my_char=(e.which-96).toString(); 
}