我正在使用jQuery来验证文本框以仅允许数字。问题是,它允许shift +特殊字符。 我使用类似的代码进行名称验证,除了一些更改,但它不允许任何特殊字符。我很困惑。我的代码是
if(e.keyCode==46 || e.keyCode==8|| e.keyCode==9 || e.keyCode==37 || e.keyCode==39)
{
// do nothing allow
}
else if(e.keyCode>=48 && e.keyCode<=57)
{
// do nothing allow
}
else
{
e.preventDefault();
}
这是我的Fiddle。在小提琴上,第一个输入框不允许使用@,#,$,%
之类的特殊字符。但第二个允许特殊字符。我检查了If
语句中的特殊字符。我的逻辑是否正确?有什么不对吗?
答案 0 :(得分:0)
这应该有效:尝试
var schk=0;
$('#phone').keyup(function(e){
if(e.keyCode==16)
{
schk=0;
}
});
$('#phone').keydown(function(e){
if(e.keyCode==16)
{
schk=1;
}
});
在我的代码中我正在做的是当用户按下按钮时我只需将全局变量schk
的值更改为1
。只要用户按住它,它就会保持{{1} }。
当用户离开shift键时,它再次初始化为1
,允许其输入。
为什么选择第一个输入而不是问题小提琴中的第二个?
在您的第一个输入框中,您不允许显示数字。 shift + 1触发与按1时相同的键代码。如果键入1或!密钥代码将相同0
。
答案 1 :(得分:0)
这是更新的代码
var reg = new RegExp('^\d+(\.\d{1,2})?$');
$('#phone')
.keydown(function(evt){
var charCode = evt.which || evt.keyCode;
var charStr = String.fromCharCode(charCode);
if (evt.keyCode == 46 || evt.keyCode == 8 || evt.keyCode == 9 || evt.keyCode == 27 || evt.keyCode == 13 ||
// Allow: Ctrl+A
(evt.keyCode == 65 && evt.ctrlKey === true) ||
// Allow: home, end, left, right
(evt.keyCode >= 35 && evt.keyCode <= 39) || charCode == 46) {
// let it happen, don't do anything
return;
}
else if (!reg.test(charStr)) {
evt.preventDefault();
}
else {
}
});
希望这有帮助
答案 2 :(得分:-1)
我认为将您的第一个事件绑定函数从keydown
更改为keypress
可以解决问题:
请参阅http://jsfiddle.net/cH3zP/5/
$('#phone').keypress(function(e){
if(e.keyCode==46 || e.keyCode==8|| e.keyCode==9 || e.keyCode==37 || e.keyCode==39)
{
// do nothing allow
}
else if(e.keyCode>=48 && e.keyCode<=57)
{
// do nothing allow
}
else
{
e.preventDefault();
}
});