957

(0,1,2,3,4,5 ... 9)0-9のような数字のみを許可する入力テキストフィールドがあるWebページを作成しています。

jQueryを使用してこれを行うにはどうすればよいですか?

4

69 に答える 69

1342

注:これは更新された回答です。以下のコメントは、キーコードをいじった古いバージョンを参照しています。

jQuery

JSFiddleで自分で試してみてください。

<input>これにはネイティブの jQuery 実装はありませんが、次のプラグインを使用してテキストの入力値をフィルタリングできinputFilterます (コピー + 貼り付け、ドラッグ + ドロップ、キーボード ショートカット、コンテキスト メニュー操作、入力不可キー、キャレット位置、異なるキーボード レイアウト、およびIE 9 以降のすべてのブラウザー):

// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
  $.fn.inputFilter = function(inputFilter) {
    return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
      if (inputFilter(this.value)) {
        this.oldValue = this.value;
        this.oldSelectionStart = this.selectionStart;
        this.oldSelectionEnd = this.selectionEnd;
      } else if (this.hasOwnProperty("oldValue")) {
        this.value = this.oldValue;
        this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
      } else {
        this.value = "";
      }
    });
  };
}(jQuery));

プラグインを使用しinputFilterて入力フィルターをインストールできるようになりました。

$(document).ready(function() {
  $("#myTextBox").inputFilter(function(value) {
    return /^\d*$/.test(value);    // Allow digits only, using a RegExp
  });
});

その他の入力フィルターの例については、 JSFiddle デモを参照してください。また、サーバー側の検証を行う必要があることにも注意してください!

純粋な JavaScript (jQuery なし)

これには jQuery は実際には必要ありません。純粋な JavaScript でも同じことができます。この回答を参照してください。

HTML5

HTML 5 には<input type="number">(仕様を参照) を使用したネイティブ ソリューションがありますが、ブラウザーのサポートはさまざまであることに注意してください。

  • ほとんどのブラウザーは、入力時ではなく、フォームの送信時にのみ入力を検証します。
  • ほとんどのモバイル ブラウザstepは、属性minと属性をサポートしていませんmax
  • Chrome (バージョン 71.0.3578.98) では、ユーザーは引き続き文字を入力eEてフィールドに入力できます。この質問も参照してください。
  • Firefox (バージョン 64.0) および Edge (EdgeHTML バージョン 17.17134) では、ユーザーはフィールドに任意のテキストを入力できます。

w3schools.comで試してみてください。

于 2009-06-15T09:26:14.757 に答える
195

これが私が使用する関数です:

// Numeric only control handler
jQuery.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;
            // allow backspace, tab, delete, enter, arrows, numbers and keypad numbers ONLY
            // home, end, period, and numpad decimal
            return (
                key == 8 || 
                key == 9 ||
                key == 13 ||
                key == 46 ||
                key == 110 ||
                key == 190 ||
                (key >= 35 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });
    });
};

次に、次の手順を実行して、コントロールにアタッチできます。

$("#yourTextBoxName").ForceNumericOnly();
于 2010-03-08T16:57:14.497 に答える
172

列をなして:

<input name="number" onkeyup="if (/\D/g.test(this.value)) this.value = this.value.replace(/\D/g,'')">

目立たないスタイル (jQuery を使用):

$('input[name="number"]').keyup(function(e)
                                {
  if (/\D/g.test(this.value))
  {
    // Filter non-digits from input value.
    this.value = this.value.replace(/\D/g, '');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="number">

于 2011-06-05T03:43:03.963 に答える
105

シンプルな JavaScript 正規表現を使用して、純粋な数字をテストできます。

/^[0-9]+$/.test(input);

これは、入力が数値の場合は true を返し、そうでない場合は false を返します。

またはイベントキーコードの場合、以下の簡単な使用:

     // Allow: backspace, delete, tab, escape, enter, ctrl+A and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
         // Allow: Ctrl+A
        (e.keyCode == 65 && e.ctrlKey === true) || 
         // Allow: home, end, left, right
        (e.keyCode >= 35 && e.keyCode <= 39)) {
             // let it happen, don't do anything
             return;
    }

    var charValue = String.fromCharCode(e.keyCode)
        , valid = /^[0-9]+$/.test(charValue);

    if (!valid) {
        e.preventDefault();
    }
于 2010-02-17T17:55:26.300 に答える
100

次のような入力イベントで使用できます。

$(document).on("input", ".numeric", function() {
    this.value = this.value.replace(/\D/g,'');
});

しかし、このコード特権は何ですか?

  • モバイル ブラウザで動作します (keydown と keyCode には問題があります)。
  • 「on」を使用しているため、AJAX で生成されたコンテンツでも機能します。
  • 貼り付けイベントなどで、キーダウンよりもパフォーマンスが向上します。
于 2015-08-14T07:27:49.810 に答える
45

JavaScript 関数isNaNを使用します。

if (isNaN($('#inputid').val()))

if (isNaN(document.getElementById('inputid').val()))

if (isNaN(document.getElementById('inputid').value))

更新: そして、ここでそれについて話しているがjQueryを使用している素晴らしい記事:HTMLテキストボックスの入力を数値に制限する

于 2010-03-08T17:00:39.527 に答える
33
$(document).ready(function() {
    $("#txtboxToFilter").keydown(function(event) {
        // Allow only backspace and delete
        if ( event.keyCode == 46 || event.keyCode == 8 ) {
            // let it happen, don't do anything
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.keyCode < 48 || event.keyCode > 57 ) {
                event.preventDefault(); 
            }   
        }
    });
});

ソース: http://snipt.net/GerryEng/jquery-making-textfield-only-accept-numeric-values

于 2009-06-15T09:26:59.340 に答える
30

これは、内部共通の js ファイルで使用します。この動作が必要な入力にクラスを追加するだけです。

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});
于 2011-02-14T19:47:32.443 に答える
26

私にとってもっと簡単なのは

jQuery('.plan_eff').keyup(function () {     
  this.value = this.value.replace(/[^1-9\.]/g,'');
});
于 2012-04-02T11:20:32.477 に答える
14

HTML5 の pattern 属性は、要素の値をチェックする正規表現を指定します。

  <input  type="text" pattern="[0-9]{1,3}" value="" />

注: pattern 属性は、次の入力タイプで機能します: text、search、url、tel、email、および password。

  • [0-9] は、任意の正規表現条件に置き換えることができます。

  • {1,3} 最小 1 を表し、最大 3 桁を入力できます。

于 2015-01-19T12:11:55.777 に答える
14

HTML5数値入力を試すことができます:

<input type="number" value="0" min="0"> 

非準拠のブラウザーには、ModernizrWebforms2 のフォールバックがあります。

于 2011-12-22T22:36:54.117 に答える
11

jQuery.validateを使用したかなり単純なもの

$(document).ready(function() {
    $("#formID").validate({
        rules: {
            field_name: {
                numericOnly:true
            }
        }
    });
});

$.validator.addMethod('numericOnly', function (value) {
       return /^[0-9]+$/.test(value);
}, 'Please only enter numeric values (0-9)');
于 2011-02-24T23:35:56.373 に答える
9
function suppressNonNumericInput(event){
        if( !(event.keyCode == 8                                // backspace
            || event.keyCode == 46                              // delete
            || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
            || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
            || (event.keyCode >= 96 && event.keyCode <= 105))   // number on keypad
            ) {
                event.preventDefault();     // Prevent character input
        }
    }
于 2010-07-12T20:38:09.413 に答える
8

次の JavaScript 関数を使用できます。

function maskInput(e) {
    //check if we have "e" or "window.event" and use them as "event"
        //Firefox doesn't have window.event 
    var event = e || window.event 

    var key_code = event.keyCode;
    var oElement = e ? e.target : window.event.srcElement;
    if (!event.shiftKey && !event.ctrlKey && !event.altKey) {
        if ((key_code > 47 && key_code < 58) ||
            (key_code > 95 && key_code < 106)) {

            if (key_code > 95)
                 key_code -= (95-47);
            oElement.value = oElement.value;
        } else if(key_code == 8) {
            oElement.value = oElement.value;
        } else if(key_code != 9) {
            event.returnValue = false;
        }
    }
}

そして、次のようにテキストボックスにバインドできます。

$(document).ready(function() {
    $('#myTextbox').keydown(maskInput);
});

上記を本番環境で使用していますが、完全に機能し、クロスブラウザーです。さらに、jQuery に依存しないため、インライン JavaScript を使用してテキスト ボックスにバインドできます。

<input type="text" name="aNumberField" onkeydown="javascript:maskInput()"/>
于 2009-06-15T09:27:24.940 に答える
8

私は、他のソリューションのようにユーザーがテキストを選択したり、貼り付けたりすることを妨げない、非常に優れたシンプルなソリューションにたどり着きました。jQueryスタイル:)

$("input.inputPhone").keyup(function() {
    var jThis=$(this);
    var notNumber=new RegExp("[^0-9]","g");
    var val=jThis.val();

    //Math before replacing to prevent losing keyboard selection 
    if(val.match(notNumber))
    { jThis.val(val.replace(notNumber,"")); }
}).keyup(); //Trigger on page load to sanitize values set by server
于 2013-09-19T21:07:51.657 に答える
7

これは、私が以前に作成した簡単なソリューションです。あなたは私の記事でそれについてもっと読むことができます:

http://ajax911.com/numbers-numeric-field-jquery/

$("#textfield").bind("keyup paste", function(){
    setTimeout(jQuery.proxy(function() {
        this.val(this.val().replace(/[^0-9]/g, ''));
    }, $(this)), 0);
});
于 2012-05-24T19:51:13.987 に答える
7

みんなの役に立てると思います

  $('input.valid-number').bind('keypress', function(e) { 
return ( e.which!=8 && e.which!=0 && (e.which<48 || e.which>57)) ? false : true ;
  })
于 2012-04-05T07:18:09.167 に答える
6

上記の@ user261922の投稿に基づいて、わずかに変更して、すべてを選択し、タブを選択して、同じページで複数の「数値のみ」フィールドを処理できるようにしました。

var prevKey = -1, prevControl = '';
$(document).ready(function () {
    $(".OnlyNumbers").keydown(function (event) {
        if (!(event.keyCode == 8                                // backspace
            || event.keyCode == 9                               // tab
            || event.keyCode == 17                              // ctrl
            || event.keyCode == 46                              // delete
            || (event.keyCode >= 35 && event.keyCode <= 40)     // arrow keys/home/end
            || (event.keyCode >= 48 && event.keyCode <= 57)     // numbers on keyboard
            || (event.keyCode >= 96 && event.keyCode <= 105)    // number on keypad
            || (event.keyCode == 65 && prevKey == 17 && prevControl == event.currentTarget.id))          // ctrl + a, on same control
        ) {
            event.preventDefault();     // Prevent character input
        }
        else {
            prevKey = event.keyCode;
            prevControl = event.currentTarget.id;
        }
    });
});
于 2011-08-09T20:35:21.113 に答える
6

これは、jQuery UI Widget factory を使用する回答です。どの文字を許可するかを簡単にカスタマイズできます。

$('input').numberOnly({
    valid: "0123456789+-.$,"
});

これにより、数字、番号記号、および金額が許可されます。

$.widget('themex.numberOnly', {
    options: {
        valid : "0123456789",
        allow : [46,8,9,27,13,35,39],
        ctrl : [65],
        alt : [],
        extra : []
    },
    _create: function() {
        var self = this;

        self.element.keypress(function(event){
            if(self._codeInArray(event,self.options.allow) || self._codeInArray(event,self.options.extra))
            {
                return;
            }
            if(event.ctrlKey && self._codeInArray(event,self.options.ctrl))
            {
                return;
            }
            if(event.altKey && self._codeInArray(event,self.options.alt))
            {
                return;
            }
            if(!event.shiftKey && !event.altKey && !event.ctrlKey)
            {
                if(self.options.valid.indexOf(String.fromCharCode(event.keyCode)) != -1)
                {
                    return;
                }
            }
            event.preventDefault(); 
        });
    },

    _codeInArray : function(event,codes) {
        for(code in codes)
        {
            if(event.keyCode == codes[code])
            {
                return true;
            }
        }
        return false;
    }
});
于 2013-03-25T16:58:52.337 に答える
6

タブを許可したいでしょう:

$("#txtboxToFilter").keydown(function(event) {
    // Allow only backspace and delete
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 ) {
        // let it happen, don't do anything
    }
    else {
        // Ensure that it is a number and stop the keypress
        if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }
});
于 2011-10-05T08:04:27.467 に答える
6

これは壊れにくいようです。

// Prevent NULL input and replace text.
$(document).on('change', 'input[type="number"]', function (event) {
    this.value = this.value.replace(/[^0-9\.]+/g, '');
    if (this.value < 1) this.value = 0;
});

// Block non-numeric chars.
$(document).on('keypress', 'input[type="number"]', function (event) {
    return (((event.which > 47) && (event.which < 58)) || (event.which == 13));
});
于 2013-06-26T12:52:46.870 に答える
6

2 つの異なるアプローチを次に示します。

  1. 小数点付きの数値を許可する
  2. 小数点なしの数値を許可する

アプローチ 1:

$("#approach1").on("keypress keyup blur",function (e) {
   $(this).val($(this).val().replace(/[^0-9\.]/g,''));
      if ((e.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57)) {
          event.preventDefault();
      }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>Numeric with decimal point</h2><br/>
<span>Enter Amount</span>
<input type="text" name="amount" id="approach1">

アプローチ 2:

$("#approach2").on("keypress keyup blur",function (event) {    
   $(this).val($(this).val().replace(/[^\d].+/, ""));
    if ((event.which < 48 || event.which > 57)) {
        event.preventDefault();
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2>Numeric without decimal point</h2><br/>
<span>Enter Amount</span>
<input type="text" name="amount" id="approach2">

于 2020-05-02T09:55:18.663 に答える
5

少しでもお役に立ちたくて、自分なりのバージョン、onlyNumbers関数を作ってみました...

function onlyNumbers(e){
    var keynum;
    var keychar;

    if(window.event){  //IE
        keynum = e.keyCode;
    }
    if(e.which){ //Netscape/Firefox/Opera
        keynum = e.which;
    }
    if((keynum == 8 || keynum == 9 || keynum == 46 || (keynum >= 35 && keynum <= 40) ||
       (event.keyCode >= 96 && event.keyCode <= 105)))return true;

    if(keynum == 110 || keynum == 190){
        var checkdot=document.getElementById('price').value;
        var i=0;
        for(i=0;i<checkdot.length;i++){
            if(checkdot[i]=='.')return false;
        }
        if(checkdot.length==0)document.getElementById('price').value='0';
        return true;
    }
    keychar = String.fromCharCode(keynum);

    return !isNaN(keychar);
}

入力タグ "...input ... id="price" onkeydown="return onlyNumbers(event)"..." を追加するだけで完了です;)

于 2010-12-07T05:05:41.550 に答える
5

テンキーとタブキーも機能していることを確認する必要があります

 // Allow only backspace and delete
            if (event.keyCode == 46 || event.keyCode == 8  || event.keyCode == 9) {
                // let it happen, don't do anything
            }
            else {
                // Ensure that it is a number and stop the keypress
                if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) {

                }
                else {
                    event.preventDefault();
                }
            }
于 2009-10-16T07:13:21.747 に答える
5

これが、私が最近これを達成するために書いた理由です。これはすでに回答されていることは知っていますが、後で使用するために残します。

このメソッドは、キーボードとテンキーの両方、バックスペース、タブ、左矢印と右矢印 (通常の形式の操作) の 0-9 のみを許可します。

$(".numbersonly-format").keydown(function (event) {
    // Prevent shift key since its not needed
    if (event.shiftKey == true) {
        event.preventDefault();
    }
    // Allow Only: keyboard 0-9, numpad 0-9, backspace, tab, left arrow, right arrow, delete
    if ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 46) {
        // Allow normal operation
    } else {
        // Prevent the rest
        event.preventDefault();
    }
});
于 2011-03-08T17:20:41.763 に答える
5

HTML5数値入力を試すことができます:

<input type="number" placeholder="enter the number" min="0" max="9">

この入力タグ要素は、min 属性が 0 に設定され、max 属性が 9 に設定されているため、0 から 9 の間の値のみを取るようになりました。

詳細については、http://www.w3schools.com/html/html_form_input_types.asp をご覧ください。

于 2015-04-14T17:05:35.103 に答える
5

入力値が数値であることを確認する簡単な方法は次のとおりです。

var checknumber = $('#textbox_id').val();

    if(jQuery.isNumeric(checknumber) == false){
        alert('Please enter numeric value');
        $('#special_price').focus();
        return;
    }
于 2013-10-22T06:59:05.423 に答える
5

私も答えたいと思います:)

    $('.justNum').keydown(function(event){
        var kc, num, rt = false;
        kc = event.keyCode;
        if(kc == 8 || ((kc > 47 && kc < 58) || (kc > 95 && kc < 106))) rt = true;
        return rt;
    })
    .bind('blur', function(){
        num = parseInt($(this).val());
        num = isNaN(num) ? '' : num;
        if(num && num < 0) num = num*-1;
        $(this).val(num);
    });

それだけです...ただの数字です。:) ほとんどの場合、「ぼかし」だけで機能しますが...

于 2012-01-19T00:17:18.107 に答える
4

キーストロークを使用して押された文字を検出することには、信じられないほどの互換性の問題があります...詳細については、quirksmodeを参照してください。

実際のユニバーサル文字を評価するために使用できる $(element).val() メソッドがあるため、keyup を使用してフィルターを作成することをお勧めします。

次に、次のような正規表現を使用して、非数字を除外できます。

replace(/[^0-9]/g,'');

これにより、シフトやペーストの問題などのすべての問題が処理されます。これは、キーアップが常に存在し、値が常に評価されるためです (javascript がオフになっていない限り)。

だから...これをJQueryに変えるには...これは私が書いている少し未完成のプラグインです。これはinputmaskと呼ばれ、完成するとより多くのマスクをサポートします。今のところ、数字マスクが機能しています。

ここに行きます...

/**
 * @author Tom Van Schoor
 * @company Tutuka Software
 */
(function($) {
  /**
   * @param {Object}
   * $$options options to override settings
   */
  jQuery.fn.inputmask = function($$options) {
    var $settings = $.extend( {}, $.fn.inputmask.defaults, $$options);

    return this.each(function() {
      // $this is an instance of the element you call the plug-in on
      var $this = $(this);

      /*
       * This plug-in does not depend on the metadata plug-in, but if this
       * plug-in detects the existence of the metadata plug-in it will
       * override options with the metadata provided by that plug-in. Look at
       * the metadata plug-in for more information.
       */
      // o will contain your defaults, overruled by $$options,
      // overruled by the meta-data
      var o = $.metadata ? $.extend( {}, $settings, $this.metadata()) : $settings;

      /*
       * if digits is in the array 'validators' provided by the options,
       * stack this event handler
       */
      if($.inArray('digits', o.validators) != -1) {
        $this.keyup(function(e) {
          $this.val(stripAlphaChars($this.val()));
        });
      }

      /*
       * There is no such things as public methods in jQuery plug-ins since
       * there is no console to perform commands from a client side point of
       * view. Typically only private methods will be fired by registered
       * events as on-click, on-drag, etc... Those registered events could be
       * seen as public methods.
       */

      // private method
      var stripAlphaChars = function(string) {
        var str = new String(string); 
        str = str.replace(/[^0-9]/g, ''); 
        return str;
      }

    });
  };

  // static public functions
  //jQuery.fn.inputmask.doSomething = function(attr) {

  //};

  // static public members
  //jQuery.fn.inputmask.someStaticPublicMember;

  // some default settings that can be overridden by either $$options or
  // metadata
  // If you need callback functions for the plug-in, this is where they get
  // set
  jQuery.fn.inputmask.defaults = {
    validators : []
  };
})(jQuery);

それを使用するには、次のようにします。

$('#someElementId').inputmask({
  validators: ['digits','someOtherNotYetImplementedValidator']
});

「someOtherNotYetImplementedValidator」は、追加の将来のマスク/バリデーターのためにこれを拡張する方法を示すためのものです。追加しても省略しても構いませんが、何も壊れません ;-)

コメントの余分な乱雑さについてお詫び申し上げます。私はここで職場の人たちのために作成したテンプレートを使用しています。

これが役に立てば幸いです、乾杯

于 2011-03-18T09:30:00.530 に答える
3

正規表現の方法は次のとおりです。

$('input').bind('keypress', function (event) {
var regex = new RegExp("^[0-9]+$");
var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
   event.preventDefault();
   return false;
}

});

https://jsfiddle.net/astrapi69/qbk2vjty/1/

また、数字以外の文字を制限したい場合は、正規表現を他のものに変更できます。

于 2015-09-17T14:49:51.060 に答える
3

トップアンサーに問題がありました。数字キーパッドは含まれておらず、Shift + 数字を押しても特殊記号は表示されません..しかし、このソリューションはそれを処理しません。

このスレッドで見つけた最良のリンクは次のとおりです: http://www.west-wind.com/weblog/posts/2011/Apr/22/Restricting-Input-in-HTML-Textboxes-to-Numeric-Values

私はstackoverflowが初めてなので、より良いソリューションをトップポストに編集できるかどうかわかりません。

于 2011-09-16T09:45:02.167 に答える
3

回答#3についてもう少し詳しく説明するには、次のことを行います(注:キーボードまたはマウスによる貼り付け操作はまだサポートされていません):

$('#txtNumeric').keypress(
            function(event) {
                //Allow only backspace and delete
                if (event.keyCode != 46 && event.keyCode != 8) {
                    if (!parseInt(String.fromCharCode(event.which))) {
                        event.preventDefault();
                    }
                }
            }
        );
于 2010-03-08T16:50:28.903 に答える
3

この jQuery コードはShiftCtrlまたはAltが押されている間に入力された文字を除外します。

$('#AmountText').keydown(function (e) {
    if (e.shiftKey || e.ctrlKey || e.altKey) { // if shift, ctrl or alt keys held down
        e.preventDefault();         // Prevent character input
    } else {
        var n = e.keyCode;
        if (!((n == 8)              // backspace
        || (n == 46)                // delete
        || (n >= 35 && n <= 40)     // arrow keys/home/end
        || (n >= 48 && n <= 57)     // numbers on keyboard
        || (n >= 96 && n <= 105))   // number on keypad
        ) {
            e.preventDefault();     // Prevent character input
        }
    }
});
于 2011-02-15T21:14:16.243 に答える
2

以下のコードを document.ready に追加します

    $('.class of text box').keyup(function () 
    {
    this.value = this.value.replace(/[^0-9]/g, '');
    });  
于 2014-06-11T05:33:49.477 に答える
2

あなたが探しているものにはやり過ぎかもしれませんが、autoNumeric() と呼ばれる jQuery プラグインをお勧めします - それは素晴らしいです!

数値のみ、小数精度、最大/最小値などに制限できます。

http://www.decorplanit.com/plugin/

于 2011-12-06T18:56:29.933 に答える
1

この答えは完璧でしたが、 jQuery.Validation プラグインと組み合わせることで、より優れた、より強力なものにすることもできます。

number() メソッドを使用することで、次のようなものを開発できます。

$('.numberOnly').keydown(function (event) { 
  if ((!event.shiftKey && !event.ctrlKey && !event.altKey) && 
    ((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105))) 
  // 0-9 or numpad 0-9, disallow shift, ctrl, and alt 
  { 
    // check textbox value now and tab over if necessary 
  } 
  else if (event.keyCode != 8 && event.keyCode != 13 && event.keyCode != 46 && event.keyCode != 37 
    && event.keyCode != 39 && event.keyCode != 9 && event.keyCode != 109 
    && event.keyCode != 189 && event.keyCode != 110 && event.keyCode != 190) 
  // not backsapce (8), enter (13), del (46), left arrow (37), right arrow (39), tab (9), negetive sign (- : 109, 189), or point (. : 110, 190) 
  { 
    event.preventDefault(); 
  } 
  // else the key should be handled normally 
}); 
// _____________________________________________
jQuery.validator.setDefaults({ 
  debug: true, 
  success: "valid" 
}); 
// _____________________________________________
$(document).ready(function(){ 
  $('#myFormId').validate({ 
    rules: { 
      field: { 
        required: true, 
        number: true 
      } 
    } 
  }); 
}); 

そのため、「numberOnly」クラスの「#myFormId」フォームの Textbox は、10 進数、浮動小数点数、さらには負の数を含む数値のみを受け入れます。出来上がり:)

PS: 私の場合、何らかの理由で .validate() の代わりに jQuery.validator.addMethod() を使用しました:

jQuery.validator.addMethod("numberOnly", function (value, element) { 
var result = !isNaN(value); 
return this.optional(element) || result; 
}, jQuery.format("Please enter a valid number.")); 

(それは私の ASP.NET MVC 3 プロジェクト内で正常に動作します + 目立たない JavaScript 検証、hooooooooray!)

于 2011-10-05T03:06:54.477 に答える
1
/**
Makes the textbox to accept only numeric input
*/

(function($) {
    $.fn.allowOnlyNumeric = function() {

        /**
        The interval code is commented as every 250 ms onchange of the textbox gets fired.
        */

        //  var createDelegate = function(context, method) {
        //      return function() { method.apply(context, arguments); };
        //  };

        /**
        Checks whether the key is only numeric.
        */
        var isValid = function(key) {
            var validChars = "0123456789";
            var validChar = validChars.indexOf(key) != -1;
            return validChar;
        };

        /**
        Fires the key down event to prevent the control and alt keys
        */
        var keydown = function(evt) {
            if (evt.ctrlKey || evt.altKey) {
                evt.preventDefault();
            }
        };

        /**
        Fires the key press of the text box   
        */
        var keypress = function(evt) {
            var scanCode;
            //scanCode = evt.which;
            if (evt.charCode) { //For ff
                scanCode = evt.charCode;
            }
            else { //For ie
                scanCode = evt.keyCode;
            }

            if (scanCode && scanCode >= 0x20 /* space */) {
                var c = String.fromCharCode(scanCode);
                if (!isValid(c)) {
                    evt.preventDefault();
                }
            }
        };

        /**
        Fires the lost focus event of the textbox   
        */
        var onchange = function() {
            var result = [];
            var enteredText = $(this).val();
            for (var i = 0; i < enteredText.length; i++) {
                var ch = enteredText.substring(i, i + 1);
                if (isValid(ch)) {
                    result.push(ch);
                }
            }
            var resultString = result.join('');
            if (enteredText != resultString) {
                $(this).val(resultString);
            }

        };

        //var _filterInterval = 250;
        //var _intervalID = null;

        //var _intervalHandler = null;

        /**
        Dispose of the textbox to unbind the events.
        */
        this.dispose = function() {
            $(this).die('change', onchange);
            $(this).die('keypress', keypress);
            $(this).die('keydown', keydown);
            //window.clearInterval(_intervalHandler);
        };

        $(this).live('change', onchange);
        $(this).live('keypress', keypress);
        $(this).live('keydown', keydown);
        //_intervalHandler = createDelegate(this, onchange);
        //_intervalID = window.setInterval(_intervalHandler, _filterInterval);
    }
})(jQuery);

上記の $ プラグインは、AjaxControlToolkit フィルター テキスト ボックスの extender.js から作成されています。

ただし、AjaxControlToolkit から借用されていない 1 つの動作は、ユーザーが数値以外の値をコピーして貼り付けると、onchange イベントが発生し、テキスト ボックスが値を消費することです。コードを調べたところ、この onchange が 250 ミリ秒ごとに呼び出されたことがわかりました。これはパフォーマンス ヒットであるため、その部分にコメントしました。

于 2011-03-18T05:35:59.913 に答える
1

私の場合、どの回答も機能しなかったため、受け入れられた回答を少し変更して、動的に追加された要素で機能するようにしました。

楽しみ :

var inputFilter = function (elem, cb) {
    /*
    *    /^-?\d*$/               restricts input to integer numbers
    *    /^\d*$/                 restricts input to unsigned integer numbers
    *    /^[0-9a-f]*$/i          restricts input to hexadecimal numbers
    *    /^-?\d*[.,]?\d*$/       restricts input to floating point numbers (allowing both . and , as decimal separator)
    *    /^-?\d*[.,]?\d{0,2}$/   restricts input to currency values (i.e. at most two decimal places)
    */
    bdy.on('input keydown keyup mousedown mouseup select contextmenu drop', elem, function () {
        if (cb(this.value)) {
            this.oldValue = this.value;
            this.oldSelectionStart = this.selectionStart;
            this.oldSelectionEnd = this.selectionEnd;
        } else if (this.hasOwnProperty('oldValue')) {
            this.value = this.oldValue;
            this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
        }
    });
};

使用法 :

inputFilter('#onlyDigitsInput', function (val) {
    return /^\d*$/.test(val);
});
于 2018-12-17T21:51:42.040 に答える
1

スムーズな OneLiner がある場合:

<input type="text" onkeypress="return /[0-9]/i.test(event.key)" >
于 2022-01-04T12:14:07.613 に答える
0

I recommend to check event.metaKey as well. If that's set to true, the user might be doing something like cmd-A to select all the text in the field. You should allow that too.

于 2011-11-06T21:23:32.187 に答える
0

私はこのフォームで使用しています。、、、などhomeのキーを許可するのは正しいようですが、ユーザーが特別な文字を印刷できるという欠点があります。endshiftctrl

$("#busca_cep").keydown(function(event) {
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 13 || event.keyCode == 16 || event.keyCode == 36 || event.keyCode == 35) {
        if (event.keyCode == 13) {
            localiza_cep(this.value);
        }
    } else {
        if ((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
            event.preventDefault(); 
        }   
    }
});
于 2011-12-16T13:36:56.137 に答える
0

小数点が既に使用されているかどうかを確認します:-

        // Stop: Multiple decimal points
        if((e.keyCode == 190 || e.keyCode == 110) && ((this.value).indexOf(".") >= 0))
            e.preventDefault(); 
于 2013-02-05T11:33:36.960 に答える
0

別のアプローチを以下に示します。これにより、貼り付けも処理されます。【英数字検証用】

//Input Validation
var existingLogDescription = "";

$('.logDescription').keydown(function (event) {
    existingLogDescription = this.value;

});


$('.logDescription').keyup(function () {
    if (this.value.match(/[^a-zA-Z0-9 ]/g)) {
        alert("Log Description should contain alpha-numeric values only");
        this.value = this.value.replace(/[^a-zA-Z0-9 ]/g, '');
        this.value = existingLogDescription;
    }
});
于 2012-09-12T09:00:16.100 に答える
0

クラスを入力テキストに入れて、only_numbers という名前を付けます

ページに jquery コードを挿入する

$(document).ready(function() {
    $('.only_numbers').keyup(function() {
        var numbers = $(this).val();
        $(this).val(numbers.replace(/\D/, ''));
    });
});

楽しんで :-)

于 2015-12-23T07:19:50.223 に答える
0
jQuery("#no_of").keypress(function(event){
    //Allow only backspace and delete
    if (event.keyCode != 46 && event.keyCode != 8) {
        if (!parseInt(String.fromCharCode(event.which))) {
            event.preventDefault();
        }
    }
});

jQuery("#no_of").keyup(function(e){
    var temp_s= jQuery("#no_of").val();
    var multiply_val= temp_s*10;
    jQuery("#ex-r").html(multiply_val);
});
于 2011-01-25T06:58:26.900 に答える
0
$(document).ready(function()
{
    $("#textBoxId").bind("change",checkInput);
});

function checkInput()
{
    // check if $('#textBoxId').val() is under your constraints
    // then change its value, removing the last character
    // since this event will be called each time you
    // type a character
}
于 2013-03-27T06:05:28.640 に答える
0

これは、整数値または浮動小数点値の数値入力を検証するために使用するものです (jQuery を使用した目立たないスタイル):

$('input[name="number"]').keyup(function(e) {
    var float = parseFloat($(this).attr('data-float'));

    /* 2 regexp for validating integer and float inputs *****
        > integer_regexp : allow numbers, but do not allow leading zeros
        > float_regexp : allow numbers + only one dot sign (and only in the middle of the string), but do not allow leading zeros in the integer part
    *************************************************************************/
    var integer_regexp = (/[^0-9]|^0+(?!$)/g);
    var float_regexp = (/[^0-9\.]|^\.+(?!$)|^0+(?=[0-9]+)|\.(?=\.|.+\.)/g);

    var regexp = (float % 1 === 0) ? integer_regexp : float_regexp;
    if (regexp.test(this.value)) {
        this.value = this.value.replace(regexp, '');
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" data-float="1" id="number" name="number" placeholder="integer">
<input type="text" data-float="0.1" id="number" name="number" placeholder="float">

于 2017-04-28T23:11:21.897 に答える
-1

jquery 数値を使用します。以下の関数では、10 進数と数値を使用できます。
例: $("#inputId").numeric({ allow: "." });

于 2012-07-30T13:12:04.543 に答える
-2
function Numbers(e)
{
    if($.browser.msie)
    {
        if(e.keyCode > 47 && e.keyCode < 58)
            return true;
        else
            return false;
    }
    else
    {
        if((e.charCode > 47 && e.charCode < 58) || (e.charCode == 0))
            return true;
        else
            return false;
    }
}

これがすべてのブラウザで機能することを願っています。

于 2011-11-28T06:24:23.300 に答える