3

使用一些非常基本的代码,例如(来自另一个 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

4 回答 4

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) 的字符代码不在这些范围内。您需要使用该evt.ctrlKey属性将这些命令列入白名单。

于 2013-03-17T08:32:23.987 回答
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;
   }
于 2013-03-17T08:40:43.327 回答
0

试试这个功能:

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

提琴手

于 2013-03-17T08:39:59.140 回答
0

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

这现在在jquery.alphanum V1.0.9中得到修复,您描述的问题记录为Issue #9

于 2013-05-14T16:05:26.127 回答