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

Javascript限制为数字,仅适用于Chrome,javascript,Javascript,使用一些非常基本的代码,例如(来自另一个Stackoverflow问题) 我发现,当你只需输入数字时,这段代码就能很好地工作。然而,它似乎在Firefox、Safari、Opera(因为我运行的是OSX 10.8.3,所以无法测试IE)上阻止了复制/粘贴/全选功能,但在Chrome上却没有。我似乎不明白为什么。有什么想法吗 我还尝试了jqueryalphanum库 但这也表现出相同的行为。如果从关联菜单中选择剪切、复制、粘贴和选择所有命令(即右键单击文本框并选择相应的命令),则剪切、复制、

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


我发现,当你只需输入数字时,这段代码就能很好地工作。然而,它似乎在Firefox、Safari、Opera(因为我运行的是OSX 10.8.3,所以无法测试IE)上阻止了复制/粘贴/全选功能,但在Chrome上却没有。我似乎不明白为什么。有什么想法吗

我还尝试了jqueryalphanum库


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

如果从关联菜单中选择剪切、复制、粘贴和选择所有命令(即右键单击文本框并选择相应的命令),则剪切、复制、粘贴和选择所有命令都将起作用

但是,Ctrl+X、Ctrl+C、Ctrl+V和Ctrl+A不起作用的原因是它们也是被函数阻止的关键事件。当您按下一个键而它不是一个数字时,函数返回
false

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

if (charCode != 46 && charCode > 31 
        && (charCode < 48 || charCode > 57))
        return false;
if(charCode!=46&&charCode>31
&&(字符编码<48 | |字符编码>57))
返回false;
键盘快捷键(Ctrl+X/C/V/A)的字符码不在这些范围内。您需要使用
evt.ctrlKey
属性将这些命令列为白名单。

尝试以下功能:

function isNumber(e) {
        e = e || event;
        return +(String.fromCharCode(e.charCode || e.keyCode)) 
                || !e.charCode && e.keyCode < 48;
}
函数是数字(e){
e=e | |事件;
return+(String.fromCharCode(e.charCode | | e.keyCode))
||!e.charCode&&e.keyCode<48;
}
要允许复制粘贴,请执行以下操作:

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;
   }
函数isNumberKey(evt)
{
var charCode=(evt.which)?evt.which:event.keyCode;
如果(charCode!=46&&charCode>31
&&(charCode<48 | | charCode>57))&&!evt.ctrlKey//ctrlKey//ctrlKey在按下或不按下ctrl键时返回布尔值。
返回false;
返回true;
}

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


现在,此问题已在中修复,您描述的问题记录为。

如果按ctrl+c,则其不在b/w 31-57中,因此函数将返回false。而且它不会被处理。那么为什么它在Chrome中工作呢?Chrome是否以不同方式注册密钥事件?这就是我想弄明白的。每个浏览器都可以自由地以任何顺序注册事件。这是一种可能性。这里有两个资源来解释这些浏览器的行为:有趣的是,这在Firefox/Opera/Safari上不起作用。但在铬合金中确实如此。至少在我运行OSX的机器上。如果您正在实现onkeypress以检测数字,则不允许复制粘贴。否则这将是一个错误。。。
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;
   }