为什么num pad被认为是字符?

时间:2013-11-10 15:16:54

标签: javascript jquery

这个工作正常,但是如果我使用我的数字键盘(右侧),它会认为它是一个字符并删除它但是左侧的数字被接受。我希望我的号码垫(右侧)被接受。

<script type="text/javascript">

    $("input[name='inputDate']:first").keyup(function(e){
        var key=String.fromCharCode(e.keyCode);
        if(!( key >= 0 && key <= 9 )) {
            $(this).val($(this).val().substr(0,$(this).val().length-1));
        }
    });

</script>     

已更新(已解决)

     <script type="text/javascript">
        $("input[name='birthdate']:first").on('keyup', function(e){
            var val = $(this).val();
            var key = val.substr(val.length - 1)
            var value=$(this).val();
            if(value.length === 2|| value.length === 5)$(this).val($(this).val()+'/');
            if(!(key>=0&&key<=9))
              $(this).val(val.substr(0,val.length-1));
        });
    </script>

1 个答案:

答案 0 :(得分:1)

试试这个,读取最后一个字符而不是键码:

$("input[name='inputDate']:first").on('keyup', function(e){
    var val = $(this).val();
    var key = val.substr(val.length - 1)
    if(!(key>=0&&key<=9))
      $(this).val(val.substr(0,val.length-1));
});

JSFiddle

注意 - 这不会“保护”您在输入字段中粘贴的文本!为此,您需要绑定input事件。此外,非常快速的打字可能会导致一些字母“低谷”。所以......

更好的方法:

$('input[name="inputDate"]:first').on('input', function(e){
    $(this).val( $(this).val().replace(/[^0-9]+/g, '') );
});

JSFiddle

最后......

如果您要创建日期输入字段并想要使常规访问者只能输入有效日期,请查看Masked Input Plugin或其他一些“输入掩码”解决方案。

请注意,这仍然可以通过多种方式绕过,并且几乎总是需要进行服务器端检查。