Javascript限制为数字,仅适用于Chrome

时间:2013-03-17 08:28:11

标签: javascript

使用一些非常基本的代码,例如(来自另一个Stackoverflow问题)

<HTML>
  <HEAD>
    <SCRIPT language=Javascript>
       <!--
       function isNumberKey(evt)
       {
          var charCode = (evt.which) ? evt.which : event.keyCode;
          if (charCode != 46 && charCode > 31 
            && (charCode < 48 || charCode > 57))
             return false;

          return true;
       }
       //-->
    </SCRIPT>
  </HEAD>
  <BODY>
    <INPUT id="txtChar" onkeypress="return isNumberKey(event)" 
           type="text" name="txtChar">
  </BODY>
</HTML>

我发现当你输入数字时,这段代码可以很好地工作。但是,它似乎阻止了在Firefox,Safari,Opera上的所有功能上的复制/粘贴/选择(因为我运行的是OSX 10.8.3,所以无法测试IE),但它不在Chrome上。我似乎无法弄清楚为什么。有什么想法吗?

我也尝试过Jquery AlphaNum库

https://github.com/KevinSheedy/jquery.alphanum

但这也表现出相同的行为。

4 个答案:

答案 0 :(得分:2)

如果从上下文菜单中选择剪切,复制,粘贴和选择所有命令(即右键单击文本框并选择适当的命令),它将起作用。

但是,Ctrl + X,Ctrl + C,Ctrl + V和Ctrl + A不起作用的原因是它们也是您的功能阻止的关键事件。当您按某个键并且它不是数字时,您的函数将返回false

以下代码(来自您的帖子)阻止输入:

if (charCode != 46 && charCode > 31 
        && (charCode < 48 || charCode > 57))
        return false;

键盘快捷键(Ctrl + X / C / V / A)的charCodes不在这些范围内。您需要使用evt.ctrlKey属性将这些命令列入白名单。

答案 1 :(得分:1)

允许复制粘贴:

function isNumberKey(evt)
   {
      var charCode = (evt.which) ? evt.which : event.keyCode;
      if (charCode != 46 && charCode > 31 
        && (charCode < 48 || charCode > 57)) && !evt.ctrlKey  //ctrlKey returns boolean weather ctrl is pressed or not.
         return false;

      return true;
   }

答案 2 :(得分:0)

尝试此功能:

function isNumber(e) {
        e = e || event;
        return +(String.fromCharCode(e.charCode || e.keyCode)) 
                || !e.charCode && e.keyCode < 48;
}

JsFiddle

答案 3 :(得分:0)

在适用于MacOS的Firefox上,您还需要检查与e.metaKey键对应的cmd属性。

现在已修复jquery.alphanum V1.0.9,您描述的问题将记录为Issue #9