1

我试图限制用户在文本框中只输入数字

<input type="text" name="pQ[]" onkeypress=" return checkKeyVal(event)"/>

function checkKeyVal(ev)
{
    if(ev.keyCode)
    {
        if(ev.keyCode<48 || ev.keyCode>57)
        {
            return false;
        }
    }
    else
    { 
        //For Firefox
        if(ev.charCode<48 || ev.charCode>57)
        {
            return false;
        }
    }
}

我发现 keyCode 不能在 firefox 中工作,所以我添加了 charCode。现在的问题是,退格键、删除键和箭头键等其他键似乎在 Firefox 中都不起作用

4

2 回答 2

5

您构建逻辑的方式是错误的。首先让我们看一下以下字符的 ascii 代码:

后退空间:10

删除:127

现在对于箭头键,这取决于您使用的操作系统和编程语言。本身没有“ASCII码”。操作系统检测到您按下箭头键并触发程序可以捕获的事件。

因此,此类键的信号的正常表如下所示:

                    Normal Mode            Num lock on
                 Make    Break        Make          Break
Down arrow       E0 50   E0 D0     E0 2A E0 50   E0 D0 E0 AA
Left arrow       E0 4B   E0 CB     E0 2A E0 4B   E0 CB E0 AA
Right arrow      E0 4D   E0 CD     E0 2A E0 4D   E0 CD E0 AA
Up arrow         E0 48   E0 C8     E0 2A E0 48   E0 C8 E0 AA

但是,对于使用 javascript ,通常我们使用:

left arrow: 37 
up arrow: 38
right arrow: 39
down arrow: 40

现在这些是浏览器中的 event.keyCode,而不是 ASCII 码。参考:这个网址。

让我们看看你的逻辑,

if(ev.keyCode<48 || ev.keyCode>57)
        {
            return false;
        }

所以,退格(10),左箭头(37),上箭头(38),右箭头(39),下箭头(40)小于48,删除(127)大于57。

因此,一旦按下这些键,它们将返回 false,因此您将永远不会在 UI 中看到它们进行按键操作。所以你需要做的是改变你的条件,这样对于那些按键,你就会得到真实的。

笔记 :

您可能可以使用此代码,我通常将其用于 java 脚本目的:

function isNumber(event){
  var charCode = (event.which) ? event.which : event.keyCode;
  if (charCode > 31 && (charCode < 48 || charCode > 57))
   return false;
 return true;
}

我已经在 IE 7、8、MF 和 chrome 中测试了这只小狗。似乎在任何地方都能无缝工作。但是,如果您想为自己明确记录一些按键事件,请在 google 中查找事件代码,然后阻止/取消阻止它。干杯!

于 2013-04-22T09:50:58.643 回答
0

问题是您正在使用keypress事件,切换到keyupkeydown。然后keyCode也将开始在 Firefox 中为您工作。看看这篇Quirksmode 文章,了解更多关于带有按键检测的浏览器行为的信息。

<input type="text" name="pQ[]" onkeyup="return checkKeyVal(event)"/>
于 2013-04-22T09:07:10.890 回答