jquery keyup函数检查数字

我正在尝试创建一个输入字段,用户只能输入数字。 这个function对我来说已经很好了:

$('#p_first').keyup(function(event){ if(isNaN(String.fromCharCode(event.which))){ var value = $(this).val(); $(this).val(value.substr(0,value.length-1)); } }); 

但问题是,当用户持有带有角色的键时,function键盘不会触发….任何想法我怎么能禁止这个?

尝试绑定到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/

我决定使用@Rahul Yadav提供的答案,但它是错误的,因为它不考虑具有不同代码的num pad键。

在这里,您可以看到代码表的摘录 :

这是我实现的function:

 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; 

}

最好的方法是检查输入值,而不是按下键。 因为在使用字符代码时需要检查选项卡,箭头,退格和其他字符。

用户按下某个键后该代码检查输入值:

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

while循环删除最后一个字符,直到输入值有效。 Regex / /^(([0-9]+)((\.|,)([0-9]{0,2}))?)?$/validation整数和浮点数例如。 “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');

试试这个解决方案

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

演示: http : //jsfiddle.net/DbRTj/

同样的问题:

  • 如何使用jQuery仅允许HTML输入框中的数字(0-9)?
  • jQuery:限制“数字”的最佳方法是什么 – 只为文本框输入? (允许小数点)

试试这..可能有用。

     

我使用以下函数来检查给定的字符串是否为数字。 此实现适用于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的返回值为false,则返回false:

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

使用键事件,使用event.key来获取实际值。 要检查整数:

 isFinite(event.key); 

更简单的HTML解决方案是使用number类型输入。 它仅限于数字(种类)。

  

无论哪种方式,您应该清除所有用户输入:

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