Javascript %应允许使用左箭头时不可预防
有一个问题困扰了我将近5个小时,我对JS不是很熟悉,我必须承认我真的需要帮助: 所以我得到了一个表单元素,可以在其中输入一些文本。这里只允许数字和一些控件,所以0-9和左箭头、右箭头、del和退格。其他一切都不应该出现。我的代码几乎正常工作,除了这些,我不能输入任何其他内容,除非Capslock处于活动状态,我按5键,然后输入%。在绝望中,我尝试了一些非常奇怪的构造(你会在下面看到),用我的请求折磨谷歌,找到了几十条关于它的线程(其中一条甚至在stackoverflow上),但没有解决方案 现在,我的小测试表单如下所示:Javascript %应允许使用左箭头时不可预防,javascript,jquery,keycode,Javascript,Jquery,Keycode,有一个问题困扰了我将近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”字段,因为我也想支持不知道该属性的旧浏览器
简而言之:
- 所有号码都允许
- 允许
- 允许使用左/右箭头
- 允许退格
- 其他一切都是禁止的
jsfiddle对原始表单进行了一点修改,以便更好地显示。也许这对您有所帮助:尝试拦截击键并阻止某些击键和击键组合是出了名的困难,尤其是跨浏览器。相反,允许用户键入他们想要的内容,然后在
keyUp
上从输入中删除任何禁止的字符。这可能会起作用,但看起来有点难看,可能会让用户感到困惑。甚至不应该显示有问题的字符。