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: