Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript %应允许使用左箭头时不可预防_Javascript_Jquery_Keycode - Fatal编程技术网

Javascript %应允许使用左箭头时不可预防

Javascript %应允许使用左箭头时不可预防,javascript,jquery,keycode,Javascript,Jquery,Keycode,有一个问题困扰了我将近5个小时,我对JS不是很熟悉,我必须承认我真的需要帮助: 所以我得到了一个表单元素,可以在其中输入一些文本。这里只允许数字和一些控件,所以0-9和左箭头、右箭头、del和退格。其他一切都不应该出现。我的代码几乎正常工作,除了这些,我不能输入任何其他内容,除非Capslock处于活动状态,我按5键,然后输入%。在绝望中,我尝试了一些非常奇怪的构造(你会在下面看到),用我的请求折磨谷歌,找到了几十条关于它的线程(其中一条甚至在stackoverflow上),但没有解决方案 现在

有一个问题困扰了我将近5个小时,我对JS不是很熟悉,我必须承认我真的需要帮助:

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

现在,我的小测试表单如下所示:

<!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>

$(文档).ready(函数(){
$(“#测试”)。按键(功能(e){
var代码=e.keyCode?e.keyCode:e.which;
console.log(“keyCode:+code+”| Shift:+e.shiftKey+”| charCode:+e.charCode);
如果(如换档键){
返回false;
}
如果(代码==20){
返回false;
}
如果(e.charCode==0){
返回true;
}
如果(代码!=8){
如果(代码!=46){
如果(代码!=37&&e.charCode==0){
如果(代码!=39&&e.charCode==0){
如果(代码=58){
返回false;
}
}
}
}
}
});
});
输入:
我不能在这里使用onKeyDown,因为这样%将返回keycode53,这将阻止输入5。我也不能使用“numeric”字段,因为我也想支持不知道该属性的旧浏览器

简而言之:

  • 所有号码都允许
  • 允许
  • 允许使用左/右箭头
  • 允许退格
  • 其他一切都是禁止的
希望这里的任何人都知道这个问题的解决方案。正如我所说,我对JavaScript不太熟悉,解决这个问题有点困难^^


jsfiddle对原始表单进行了一点修改,以便更好地显示。

也许这对您有所帮助:尝试拦截击键并阻止某些击键和击键组合是出了名的困难,尤其是跨浏览器。相反,允许用户键入他们想要的内容,然后在
keyUp
上从输入中删除任何禁止的字符。这可能会起作用,但看起来有点难看,可能会让用户感到困惑。甚至不应该显示有问题的字符。