JQuery验证文本框值

时间:2013-11-30 09:08:58

标签: javascript jquery html

我正在使用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语句中的特殊字符。我的逻辑是否正确?有什么不对吗?

3 个答案:

答案 0 :(得分:0)

这应该有效:尝试

http://jsfiddle.net/cH3zP/6/

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();
}
});