How to allow only numeric (0-9) in HTML inputbox using jQuery?

前端 未结 30 1818
一生所求
一生所求 2020-11-21 05:38

I am creating a web page where I have an input text field in which I want to allow only numeric characters like (0,1,2,3,4,5...9) 0-9.

How can I do this using jQuery

30条回答
  •  囚心锁ツ
    2020-11-21 06:10

    Note: This is an updated answer. Comments below refer to an old version which messed around with keycodes.

    jQuery

    Try it yourself on JSFiddle.

    There is no native jQuery implementation for this, but you can filter the input values of a text with the following inputFilter plugin (supports Copy+Paste, Drag+Drop, keyboard shortcuts, context menu operations, non-typeable keys, the caret position, different keyboard layouts, and all browsers since 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));
    

    You can now use the inputFilter plugin to install an input filter:

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

    See the JSFiddle demo for more input filter examples. Also note that you still must do server side validation!

    Pure JavaScript (without jQuery)

    jQuery isn't actually needed for this, you can do the same thing with pure JavaScript as well. See this answer.

    HTML 5

    HTML 5 has a native solution with (see the specification), but note that browser support varies:

    • Most browsers will only validate the input when submitting the form, and not when typing.
    • Most mobile browsers don't support the step, min and max attributes.
    • Chrome (version 71.0.3578.98) still allows the user to enter the characters e and E into the field. Also see this question.
    • Firefox (version 64.0) and Edge (EdgeHTML version 17.17134) still allow the user to enter any text into the field.

    Try it yourself on w3schools.com.

提交回复
热议问题