Функция jquery keyup проверяет, имеет ли номер

Я пытаюсь создать поле ввода, где пользователь может вводить только цифры. эта функция уже работает почти отлично для меня:

        $('#p_first').keyup(function(event){
        if(isNaN(String.fromCharCode(event.which))){
            var value = $(this).val();

            $(this).val(value.substr(0,value.length-1));
        }
    });

но проблема в том, что пользователь держит ключ с символом, функциональная клавиша не запускает... любые идеи, как я могу это запретить?

10
20 июня '13 в 11:48
источник поделиться
8 ответов

Попробуйте привязку к событию keypress вместо keyup. Он срабатывает многократно, когда удерживается клавиша. Когда нажатая клавиша не является номером, вы можете вызвать preventDefault(), который не позволит помещать ключ во входной тег.

   $('#p_first').keypress(function(event){

       if(event.which != 8 && isNaN(String.fromCharCode(event.which))){
           event.preventDefault(); //stop character from entering input
       }

   });

Рабочий пример: http://jsfiddle.net/rTWrb/2/

22
20 июня '13 в 11:56
источник

Лучший способ - проверить значение ввода, а не нажатую клавишу. Поскольку есть вкладки, стрелки, обратные пробелы и другие символы, которые необходимо проверить при использовании символьного кода.

Этот код проверяет входное значение после нажатия пользователем клавиши:

$('#p_first').keyup(function(){
    while(! /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/.test($('#p_first').val())){
        $('#p_first').val($('#p_first').val().slice(0, -1));
    }
});

Пока цикл удаляет последний символ до тех пор, пока значение ввода не будет действительным. Regex /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/ validate integer и float number например. "12,12", "12,1", "12.". Важно, чтобы число "12." (точка в конце). В противном случае пользователь не может ввести какой-либо период.

И затем подайте regex check для действительного числа с плавающей запятой ([0-9]{1,2}) вместо ([0-9]{0,2}):

$('form').submit(function(e){
    if(! /^([0-9]+)((\.|,)([0-9]{1,2}))?$/.test($('#p_first').val())){
        $('#p_first').addClass('error');
        e.preventDefault();
    }
});

Примечание: Лучше поместить $('#p_first') в переменную. var input = $('#p_first');

2
24 нояб. '15 в 13:52
источник

Я решил использовать ответ, предоставленный @Rahul Yadav, но он ошибочен, так как он не учитывает num pad keys, которые имеют разные коды.

Здесь вы можете увидеть фрагмент таблицы кодов:

Здесь реализована функция:

function isNumberKey(e) {
var result = false; 
try {
    var charCode = (e.which) ? e.which : e.keyCode;
    if ((charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105)) {
        result = true;
    }
}
catch(err) {
    //console.log(err);
}
return result;

}

2
23 июня '15 в 17:34
источник

Попробуйте это... это может пригодиться.

<HTML>
<input type="text" name="qty" id="price" value="" style="width:100px;" field="Quantity" class="required">
</HTML>

<script>
 $(document).ready(function() {
$('#price').live('keyup',function(){
        this.value = this.value.replace(/[^0-9\.]/g,'');
        });
});
</script>
0
29 апр. '15 в 9:26
источник

Я использовал следующую функцию, чтобы проверить, является ли данная строка номером или нет. Эта реализация работает в режиме keyup и keydown, а также заботится о клавишах numpad

// Validate Numeric inputs
function isNumber(o) {
    return o == '' || !isNaN(o - 0);
}

Предполагая, что ваш key code в событии keyup или keydown находится в переменной keyCode:

var keyCode = e.keyCode || e.which;
if (keyCode >= 96 && keyCode <= 105) {
        // Numpad keys
        keyCode -= 48;
}
console.log(isNumber(String.fromCharCode(keyCode)));
console.log(isNumber($(this).val() + String.fromCharCode(keyCode)));

Возвращает false, если возвращаемое значение from isNumber равно false:

    var txtVal = $(this).val() + String.fromCharCode(keyCode);
    if (!isNumber(txtVal)) {
        e.returnValue = false;
    }
0
21 марта '17 в 5:19
источник

При ключевом событии используйте event.key, чтобы получить фактическое значение. Чтобы проверить, является ли целое число:

isFinite(event.key);

Более простым решением для HTML будет использование ввода типа number. Он ограничивается только номерами (типами).

<input type="number">

В любом случае, вы должны очистить все пользовательские данные с помощью

string.replace(/[^0-9]/g,'');
0
05 сент. '17 в 20:47
источник
JavaScript:

  function isNumberKey(a){
  var x=a.val();
  a.val(x.replace(/[^0-9\.]/g,''));

}

HTML:

     <td><input type="text" name="qty" onkeypress="onkeyup="return isNumberKey($(this));"" value="" style="width:100px;" field="Quantity" class="required"></td>
-1
24 марта '15 в 13:10
источник

Посмотрите другие вопросы по меткам или Задайте вопрос