Firefox问题与onkeypress和charCode

ra_*_*ess 1 javascript firefox

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

<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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现keyCode不能运行firefox所以我添加了charCode.现在的问题是,没有像退格键,删除键和箭头键这样的其他键似乎在firefox中工作

The*_*ght 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
Run Code Online (Sandbox Code Playgroud)

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

left arrow: 37 
up arrow: 38
right arrow: 39
down arrow: 40
Run Code Online (Sandbox Code Playgroud)

现在这些是浏览器中的event.keyCode,但不是ASCII代码.请参阅:此网址.

让我们来看看你的逻辑,

if(ev.keyCode<48 || ev.keyCode>57)
        {
            return false;
        }
Run Code Online (Sandbox Code Playgroud)

因此,退格键(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;
}
Run Code Online (Sandbox Code Playgroud)

我已经在IE 7,8,MF和chrome中测试了这只小狗.似乎无处不在地工作.但是,如果您想要为自己明确记录某些按键事件,请在Google中查找事件代码,然后阻止/取消阻止它.干杯!