How can I limit possible inputs in a HTML5 “number” element?

前端 未结 26 2467
感动是毒
感动是毒 2020-11-22 05:12

For element, maxlength is not working. How can I restrict the maxlength for that number element?

相关标签:
26条回答
  • 2020-11-22 05:29

    You can specify it as text, but add pettern, that match numbers only:

    <input type="text" pattern="\d*" maxlength="2">
    

    It works perfect and also on mobile ( tested on iOS 8 and Android ) pops out the number keyboard.

    0 讨论(0)
  • 2020-11-22 05:30

    I know there's an answer already, but if you want your input to behave exactly like the maxlength attribute or as close as you can, use the following code:

    (function($) {
     methods = {
        /*
         * addMax will take the applied element and add a javascript behavior
         * that will set the max length
         */
        addMax: function() {
            // set variables
            var
                maxlAttr = $(this).attr("maxlength"),
                maxAttR = $(this).attr("max"),
                x = 0,
                max = "";
    
            // If the element has maxlength apply the code.
            if (typeof maxlAttr !== typeof undefined && maxlAttr !== false) {
    
                // create a max equivelant
                if (typeof maxlAttr !== typeof undefined && maxlAttr !== false){
                    while (x < maxlAttr) {
                        max += "9";
                        x++;
                    }
                  maxAttR = max;
                }
    
                // Permissible Keys that can be used while the input has reached maxlength
                var keys = [
                    8, // backspace
                    9, // tab
                    13, // enter
                    46, // delete
                    37, 39, 38, 40 // arrow keys<^>v
                ]
    
                // Apply changes to element
                $(this)
                    .attr("max", maxAttR) //add existing max or new max
                    .keydown(function(event) {
                        // restrict key press on length reached unless key being used is in keys array or there is highlighted text
                        if ($(this).val().length == maxlAttr && $.inArray(event.which, keys) == -1 && methods.isTextSelected() == false) return false;
                    });;
            }
        },
        /*
         * isTextSelected returns true if there is a selection on the page. 
         * This is so that if the user selects text and then presses a number
         * it will behave as normal by replacing the selection with the value
         * of the key pressed.
         */
        isTextSelected: function() {
           // set text variable
            text = "";
            if (window.getSelection) {
                text = window.getSelection().toString();
            } else if (document.selection && document.selection.type != "Control") {
                text = document.selection.createRange().text;
            }
            return (text.length > 0);
        }
    };
    
    $.maxlengthNumber = function(){
         // Get all number inputs that have maxlength
         methods.addMax.call($("input[type=number]"));
     }
    
    })($)
    
    // Apply it:
    $.maxlengthNumber();
    
    0 讨论(0)
  • 2020-11-22 05:32

    //For Angular I have attached following snippet.
    <div ng-app="">
      <form>
        Enter number: <input type="number" ng-model="number" onKeyPress="if(this.value.length==7) return false;" min="0">
      </form>
      <h1>You entered: {{number}}</h1>
    </div>

    If you use "onkeypress" event then you will not get any user limitations as such while developing ( unit test it). And if you have requirement that do not allow user to enter after particular limit, take a look of this code and try once.

    0 讨论(0)
  • 2020-11-22 05:33

    You can combine all of these like this:

    <input name="myinput_drs"
    oninput="maxLengthCheck(this)"
    type = "number"
    maxlength = "3"
    min = "1"
    max = "999" />
    
    <script>
      // This is an old version, for a more recent version look at
      // https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/
      function maxLengthCheck(object)
      {
        if (object.value.length > object.maxLength)
          object.value = object.value.slice(0, object.maxLength)
      }
    </script>
    


    Update:
    You might also want to prevent any non-numeric characters to be entered, because object.length would be an empty string for the number inputs, and therefore its length would be 0. Thus the maxLengthCheck function won't work.

    Solution:
    See this or this for examples.

    Demo - See the full version of the code here:
    http://jsfiddle.net/DRSDavidSoft/zb4ft1qq/1/

    Update 2: Here's the update code: https://jsfiddle.net/DRSDavidSoft/zb4ft1qq/2/

    Update 3: Please note that allowing more than a decimal point to be entered can mess up with the numeral value.

    0 讨论(0)
  • 2020-11-22 05:33

    Another option is to just add a listener for anything with the maxlength attribute and add the slice value to that. Assuming the user doesn't want to use a function inside every event related to the input. Here's a code snippet. Ignore the CSS and HTML code, the JavaScript is what matters.

    // Reusable Function to Enforce MaxLength
    function enforce_maxlength(event) {
      var t = event.target;
      if (t.hasAttribute('maxlength')) {
        t.value = t.value.slice(0, t.getAttribute('maxlength'));
      }
    }
    
    // Global Listener for anything with an maxlength attribute.
    // I put the listener on the body, put it on whatever.
    document.body.addEventListener('input', enforce_maxlength);
    label { margin: 10px; font-size: 16px; display: block }
    input { margin: 0 10px 10px; padding: 5px; font-size: 24px; width: 100px }
    span { margin: 0 10px 10px; display: block; font-size: 12px; color: #666 }
    <label for="test_input">Text Input</label>
    <input id="test_input" type="text" maxlength="5"/>
    <span>set to 5 maxlength</span>
    
    <br>
    
    <label for="test_input">Number Input</label>
    <input id="test_input" type="number" min="0" max="99" maxlength="2"/>
    <span>set to 2 maxlength, min 0 and max 99</span>

    0 讨论(0)
  • 2020-11-22 05:34

    it's very simple, with some javascript you can simulate a maxlength, check it out:

    //maxlength="2"
    <input type="number" onKeyDown="if(this.value.length==2) return false;" />
    
    0 讨论(0)
提交回复
热议问题