特定のキー以外での入力をできないようにしたかったので、keydown時に指定したキーコード以外はキャンセルする処理を実装したのですが、全角入力時に入力させたいキーでも入力ができない状態になってしまったので備忘録としてメモしておきます。
サンプルコード
数値のキーのみ入力させたかったので、以下のように実装しました。
HTML
<input type="text" name="sample" id="sample" />
JavaScript
$(function() { $('#sample').on('keydown', function(e) { var k = e.keyCode; // 0~9, テンキ―0~9以外は入力キャンセル if(!((k >= 48 && k <= 57) || (k >= 96 && k <= 105))) { return false; } }); });
これでいけるのかと思っていたのですが、全角入力時に数値のキーを押しても反応しませんでした。
数値のみ入力のデモページ
サンプルコード2
調べてみると、日本語入力時はキーコードが違うらしいです。
console.logで入力したキーコードを表示するようにしてみます。
JavaScript
$(function() { $('#sample').on('keydown', function(e) { console.log(e.keyCode); }); });
例えば、0のキーを押した時はそれぞれ以下のキーコードが返ってきました。
chrome | 半角入力:48 全角入力:229 |
---|---|
Firefox | 半角入力:48 全角入力:なし |
IE11 | 半角入力:48 全角入力:229 |
全角入力時はどのキーを押してもchromeとIIEで229が返ってきて、Firefoxではなにも返ってこないようです。
【参考サイト】
コメントが承認されるまで時間がかかります。