テキスト入力の入力を数字のみに制限しようとしています。以下に示すように、jquery keydown() 用にイベント ハンドラーをセットアップしました。私がテストしたデスクトップ ブラウザと、iOS のモバイル サファリとクロムでも期待どおりに動作します。しかし、Nexus 7 の chrome でいくつかの問題が発生しています。
function keyDownHandler( e ) {
e.stopImmediatePropagation();
if( !e.shiftKey && !e.altKey && !e.ctrlKey ) {
var key = e.which || e.keyCode;
if( key >= 48 && key <= 57 ||
key >= 96 && key <= 105 ||
key == 8 || key == 9 ||
key == 37 || key == 39 ||
key == 46 || key == 45 ) {
return true;
}
if( key == 13 ) {
//returned pressed, do something
}
}
e.preventDefault();
return false;
};
Android ソフト キーボードに関連する既知のバグはほとんどないようです。これにより、すべてのキーに対して同じキーコードの値が返されます。この値もデバイスによって異なりますが、nexus 7 の場合は 229 です。数値キーも間欠的にキーコードの正しい値を返します。これは素晴らしいことです。これに対処するためにいくつかのキャッチオールロジックを追加することができるはずですが、私が立ち往生している問題は、このメソッドが false を返し、e.preventDefault() を呼び出しても、テキストに表示される文字を妨げていないことです。入力?
私は何か間違ったことをしていて、Android chromeでイベントをキャンセルするために何か他のものを呼び出す必要がありますか、それともバグですか?
注意点として、Nexus 7 の firefox と dolphin では問題なく動作しますが、同じ問題が発生する chrome や Opera では問題ありません。
ありがとう。