У меня есть поле ввода, имеющее типовое число, чтобы оно могло принимать только цифры. Я использую регулярное выражение, чтобы ограничить ввод специальных символов пользователем. Это нормально работает в системе, но на маленьком устройстве, как в моем мобильном телефоне,тип клавиатуры только числовой, но когда я нажимаю - он берет то, что мне не нужно
Что я сделал
$('#test').on('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;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<input type="number" class="form-control" id="test">
Появляется так на мобильном телефоне

- у меня естьпопытался ограничить это регулярным выражением, но не работает на телефоне
Редактировать Я почти закрылся, я пытаюсь использовать приведенный ниже код, но в первый раз он принимает минус -
, когда я нажимаю не следующийвремя, как если бы я ввел 55, то я нажимаю -
, он не принимает его, но когда я нажимаю -
до того, как любое число принимает
(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);
}
});
};
}(jQuery));
$("#uintTextBox").inputFilter(function(value) {
return ^\d + [.] ? \d + $.test(value);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="uintTextBox" type="tel">