使用一些非常基本的代码,例如(来自另一个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
但这也表现出相同的行为。
答案 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;
}
答案 3 :(得分:0)
在适用于MacOS的Firefox上,您还需要检查与e.metaKey
键对应的cmd
属性。
现在已修复jquery.alphanum V1.0.9,您描述的问题将记录为Issue #9。