Maybe this piece of jQuery Codepen code will be useful for someone. This is for type = "number" (not "text"):
<input class="js-input-absint" type="number" step="1" min="18" max="150" name="age" value="50">
only with [0-9] enabled inputs. At the input only numbers [0-9] with min-max range (optional) will be printed / inserted.
Some clarifications: the code displays only numbers at the input stage and does not reset the value to "" (empty) if invalid numerical values ββare entered, as it happens by default for type = "number". And you cannot use the attribute pattern = "/ ^ [0-9] * $ /" for the input type = "number".
var $inputAbsint = $('.js-input-absint'); if ($inputAbsint.length) { $(document).on('keypress', '.js-input-absint', function (event) { var allowed = /^[0-9]|Arrow(Left|Right)|Backspace|Home|End|Delete$/; return allowed.test(event.key); }).on('focusout paste', '.js-input-absint', function () { var $input = $(this); var defaultValue = this.defaultValue || $input.attr('min'); // Important(!): Timeout for the updated value setTimeout(function () { var current = $input.val(); var regexNumbers = new RegExp(/^[0-9]*$/, 'g'); var isNumbersOnly = regexNumbers.test(current); // Clear wrong value (not numbers) if ((current === '' || !isNumbersOnly) && defaultValue.length) { $input.val(defaultValue); current = defaultValue; } // Min/Max var min = parseInt($input.attr('min'), 10); var max = parseInt($input.attr('max'), 10); var currentInt = parseInt(current, 10); if (!isNaN(min) && !isNaN(currentInt) && currentInt < min) { $input.val(min); } if (!isNaN(max) && !isNaN(currentInt) && currentInt > max) { $input.val(max); } }, 100); }); }
Konstantin petlya
source share