4

我使用常用​​的 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;
}

我称它为 onkeypress,它可以防止显示数字以外的任何内容。我正在尝试更改它,以便我也可以将破折​​号 (-) 放入文本字​​段。破折号键码是 189 所以我试过这个:

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

  return true;
}

认为条件语句会接受破折号,但这似乎不起作用。关于为什么会这样的任何想法?谢谢你的帮助!

4

6 回答 6

9

如果您使用的是按键事件,则需要将字符代码 45 用于破折号/连字符。

如果您使用的是 keydown/keyup 事件,那么您需要使用 109189 来覆盖数字键盘中的减号键和位于 P 键上方的那个(通常)。

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

演示:http: //jsfiddle.net/J6B7U/

如果您对函数中哪个键码是哪个 a 有疑问,console.log(charCode);将帮助您进行调试。

(还要注意,捕获键事件不足以防止输入无效数据,因为用户可以使用浏览器的编辑菜单或拖放来更改字段。)

于 2013-11-05T09:21:40.073 回答
4

尝试这个

  function isNumberKey(evt)
  {
     var charCode = (evt.which) ? evt.which : event.keyCode
     if (charCode != 45  && charCode > 31 && (charCode < 48 || charCode > 57))
        return false;

     return true;
  }

在 HTML 中

<input type="text" onkeypress="return isNumberKey(event)">
于 2014-02-11T09:48:10.670 回答
0

您想为破折号使用字符代码,即 45,而不是键码。

于 2013-11-05T09:18:32.117 回答
0

这不适用于移动设备。例如,当输入类型设置为 时,Android 上的 Chrome 会调出数字小键盘而不是全键盘"number"。您可以尝试input type="tel"改用。它将允许数字0-9-()。它还会在 Android 上调出拨号盘。没有在 iPhone 上测试过。

于 2015-05-11T19:27:07.257 回答
0

此代码仅适用于数字类型

<input onkeypress="return isNumberKey(event);">
<script>
function isNumberKey(evt)
{
   var t = (evt.which) ? evt.which : event.keyCode;
     return !(t > 31 && (t < 48 || t > 57))
}
</script>
于 2019-09-30T07:29:37.897 回答
0

这在我问的时候出现了,所以它可能值得在这里添加keyCode并且charCode被弃用,就像此时一样。

添加检查或实现也接受“-”字符的 isNumberKey 函数的更好方法是:

const isNumberKey = (event: KeyboardEvent) => 
   ((event.key.length > 1) || event.key.match(/^\d|-$/))

这样,我们检查允许特殊键执行其功能,同时确保在按下单个字符键时只允许数字。

于 2021-04-16T22:39:36.920 回答