当允许使用左箭头时,%不可预防

时间:2013-10-24 07:54:48

标签: javascript jquery keycode

现在有一个问题困扰了我近5个小时,我对JS并不熟悉,我不得不承认我真的需要帮助:

所以我有一个表单元素,我可以输入一些文本。这里只允许数字和一些控件,所以0 - 9和左箭头,右箭头,del和退格。其他一切甚至都不应该出现。我的代码几乎可以工作,我不能输入除此之外的任何东西,除了Capslock处于活动状态并按下5 - 然后输入%。在我的绝望中,我尝试了一些非常奇怪的结构(你会在下面看到它)并用我的请求折磨google,发现了几十个关于它的线程(其中一个甚至在stackoverflow上),但没有解决方案。

现在我的小testform看起来像这样:

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>

<script>
    $(document).ready(function() {
        $("#test").keypress(function(e) {
            var code = e.keyCode ? e.keyCode : e.which;

            console.log("keyCode: " + code + " | Shift: " + e.shiftKey + " | charCode:" + e.charCode);

            if(e.shiftKey){
                return false;
            }

            if(code == 20) {
                return false;
            }

            if(e.charCode == 0) {
                return true;
            }

                if(code != 8){
                    if(code != 46){
                        if(code != 37 && e.charCode == 0){
                            if(code != 39 && e.charCode == 0) {
                                if(code <= 48 || code >= 58){
                                    return false;
                                }
                            }
                        }
                    }
                }
        });
    });
</script>
</head>
<body>
    <label>Input:<input type="text" id="test"></label>
</body>
</html>

我不能在这里使用onKeyDown,因为%会返回keyCode 53,这也会阻止5进入。我不能使用“数字”字段,因为我也想支持那些不知道这个属性的旧浏览器。

如此短暂:

  • 允许所有数字
  • del allowed
  • 允许左/右箭头
  • 退场允许
  • 禁止其他一切

希望这里的任何人都知道这个解决方案。正如我所说的,我对JavaScript并不熟悉并且解决了这个问题。^^

jsfiddle here,稍微修改了原始表单以便更好地显示。

0 个答案:

没有答案