3

数字のみを入力できるようにする次のコードがあります(簡潔にするために他のロジックは削除されています)。

$("input").keydown(function (event) {
     var key = event.keyCode;
     if ((key < 48 || key > 57) && (key < 96 || key > 105) || event.shiftKey) {
         event.preventDefault();
     }
});

このコードは英語のキーボードでは問題なく動作しますが、フランス語のキーボードではシフト キーが使用されているため、そこでロジックが失敗します。シフトを削除すると、英語のキーボードでロジックが失敗します。

どのタイプのキーボードでも機能する keydown イベントで数字が押されていることを検出する方法はありますか?

ありがとう

4

4 に答える 4

1

カスタム関数を使用して、keydown の値が数値かどうかを確認します。この以前の回答から ( JavaScript で 10 進数を検証する - IsNumeric() ):

function isNumber(n) 
{
  return !isNaN(parseFloat(n)) && isFinite(n);
}

そしてあなたのハンドラUPDATED

 $("input").keydown(function (event) {
    var code = event.keyCode;

     //Allows left and right arrows, backspace, and delete
     if(code == 37 || code == 39 || code == 8 || code == 46)
        return;

     var character = String.fromCharCode(code);
     if(event.shiftKey || !isNumber(character)){
         event.preventDefault();
     }
 });
于 2013-09-12T21:20:32.663 に答える
0

これは機能しますか?

$("input").bind("propertychange input textInput", function() {
  this.value = this.value.replace(/[^\d.]/g, "");
});

もちろん、これは入力イベントのに値をトリミングするので、それがあなたが望むものかどうかはわかりません

于 2013-09-12T21:19:25.863 に答える