17

ユーザーが数字のみを入力できる入力フィールドを作成しようとしています。この機能は、私にとってはすでにほぼ正常に機能しています。

        $('#p_first').keyup(function(event){
        if(isNaN(String.fromCharCode(event.which))){
            var value = $(this).val();

            $(this).val(value.substr(0,value.length-1));
        }
    });

しかし、問題は、ユーザーが関数 keyup がトリガーされていない文字でキーを保持している場合です....これを禁止する方法はありますか?

4

8 に答える 8

37

keypressの代わりにイベントにバインドしてみてくださいkeyup。キーを押し続けると、繰り返し発射されます。押されたキーが呼び出し可能な番号でない場合、そのキーpreventDefault()は入力タグに配置されません。

   $('#p_first').keypress(function(event){

       if(event.which != 8 && isNaN(String.fromCharCode(event.which))){
           event.preventDefault(); //stop character from entering input
       }

   });

作業例: http://jsfiddle.net/rTWrb/2/

于 2013-06-20T08:56:01.967 に答える
6

@Rahul Yadav から提供された回答を使用することにしましたが、コードが異なる数字キーを考慮していないため、誤りです。

ここでは、コード表の抜粋を見ることができます:

ここで私が実装した機能:

function isNumberKey(e) {
    var result = false; 
    try {
        var charCode = (e.which) ? e.which : e.keyCode;
        if ((charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105)) {
            result = true;
        }
    }
    catch(err) {
        //console.log(err);
    }
    return result;
}
于 2015-06-23T14:34:39.960 に答える
3

最善の方法は、押されたキーではなく、入力の値を確認することです。タブ、矢印、バックスペースなど、文字コードを使用する際に確認が必要な文字があるためです。

そのコードは、ユーザーがキーを押した後の入力値をチェックします。

$('#p_first').keyup(function(){
    while(! /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/.test($('#p_first').val())){
        $('#p_first').val($('#p_first').val().slice(0, -1));
    }
});

while ループは、入力値が有効になるまで最後の文字を削除します。正規表現/^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/は、整数と浮動小数点数を検証します。「12,12」、「12.1」、「12.」。「12」という数字が重要です。(末尾のドット)も有効です!そうしないと、ユーザーはピリオドを入力できません。

そして、正規表現の送信時([0-9]{1,2})に、代わりに有効な浮動小数点数をチェックし([0-9]{0,2})ます。

$('form').submit(function(e){
    if(! /^([0-9]+)((\.|,)([0-9]{1,2}))?$/.test($('#p_first').val())){
        $('#p_first').addClass('error');
        e.preventDefault();
    }
});

注意:$('#p_first')変数に代入する方が良いです。var input = $('#p_first');

于 2015-11-24T10:52:15.720 に答える
3

この解決策を試してください:

jQuery('.numbersOnly').keyup(function () { 
    this.value = this.value.replace(/[^0-9\.]/g,'');
});

デモ: http://jsfiddle.net/DbRTj/

同じ質問:

于 2013-06-20T09:03:35.847 に答える
0

これを試してみてください..役に立つかもしれません。

<HTML>
<input type="text" name="qty" id="price" value="" style="width:100px;" field="Quantity" class="required">
</HTML>

<script>
 $(document).ready(function() {
$('#price').live('keyup',function(){
        this.value = this.value.replace(/[^0-9\.]/g,'');
        });
});
</script>
于 2015-04-29T06:26:16.063 に答える
0

キー イベントではevent.key、実際の値を取得するために使用します。整数かどうかを確認するには:

isFinite(event.key);

より簡単な HTML ソリューションは、numbertype 入力を使用することです。数字(種類)のみに制限されます。

<input type="number">

いずれにせよ、次のようにすべてのユーザー入力を消去する必要があります。

string.replace(/[^0-9]/g,'');
于 2017-09-05T17:47:54.173 に答える
-1
JavaScript:

  function isNumberKey(a){
  var x=a.val();
  a.val(x.replace(/[^0-9\.]/g,''));

}

HTML:

     <td><input type="text" name="qty" onkeypress="onkeyup="return isNumberKey($(this));"" value="" style="width:100px;" field="Quantity" class="required"></td>
于 2015-03-24T10:10:08.723 に答える