2013-06-20 1 views
10

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

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

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

но проблема в том, Whe пользователь держит ключ с характером функции KeyUp не запускающей .... какие-либо идеи, как я могу запретить это?

+0

держит какой ключ? Учитывая немного более подробное описание причины проблемы? –

+0

любой ключ ... input type = text ... и пользователь удерживает, например, «aaaaaaaaaaaaaaaa», поэтому функция keyup() не запускается, пока он не прекратит удерживать клавишу «a» –

+0

Спасибо, что предоставили больше проблем, я думаю мое предлагаемое решение должно решить вашу проблему. –

ответ

22

Попробуйте привязать к событию 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/

+0

Я пробовал, но новый charakter пока функция keypress работает не в текстовом поле, поэтому я не могу ее удалить с помощью substr() –

+0

@AdamSam см. Обновленное предложение –

+0

удивительно! спасибо;) –

0

Попробуйте это решение:

jQuery('.numbersOnly').keyup(function() { 
    this.value = this.value.replace(/[^0-9\.]/g,''); 
}); 

Демо: http://jsfiddle.net/DbRTj/

же вопросы:

+0

Если я использую клавиши с правой стороны, t работает хорошо. –

+0

@IagoMelanias Что значит? Вы говорите о втором вводе ИЛИ о стартовом коде темы? – webdeveloper

+0

Я говорю о вашем коде. Если я использую клавиши в правой части клавиатуры, это не сработает. –

-1
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> 
+0

Это возвращает true для побега? – jeff

+0

Эта функция неверна, так как не учитывает num pad key, у которых есть другой код. См. Альтернативный ответ. –

+0

Эта функция возвращает значение true, если входной сигнал - это только номер. –

0

Попробуйте This..it может ПОЛЕЗНЫЕ.

<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> 
2

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

Здесь вы можете увидеть excerpt of the code table:

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

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

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

Это значение ввода кода проверки после того, как пользователь нажал ключ:

$('#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}))?)?$/ проверять целое число и число с плавающей точкой, например. «12,12», «12,1», «12.». Важно, чтобы число «12.» (точка в конце) также действительны! В противном случае пользователь не может ввести какой-либо период.

А затем отправить чек регулярное выражение для действительного числа флоат ([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');

0

Я использовал следующую функцию, чтобы проверить, является ли данная строка номером или нет. Эта реализация работает на KeyUp и KeyDown, а также заботится о цифровой клавиатуры ключей

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

Предполагая, что ваш код ключа на 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))); 

Возврат ложно, если возвращаемое значение от IsNumber ложна:

var txtVal = $(this).val() + String.fromCharCode(keyCode); 
    if (!isNumber(txtVal)) { 
     e.returnValue = false; 
    } 
0

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

isFinite(event.key); 

Легче HTML решение будет использовать вход number типа. Он ограничивает только цифры (вид).

<input type="number"> 

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

string.replace(/[^0-9]/g,''); 

 Смежные вопросы

  • Нет связанных вопросов^_^