2

我已将输入字段限制为仅通过 js 输入的数字,但不确定如何也允许小数...

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

         return true;
      }

先感谢您!

回答:

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

 return true;
 }

添加 charCode 46 效果很好(按键值)。190和110什么也没做。

谢谢大家的帮助!

4

4 回答 4

7

代码取决于您正在收听的事件,找到您想要的内容的简单方法是使用JavaScript事件 KeyCode 测试页面和测试输入,例如您有一个句号(.右移的左侧)

               onKeyDown    onKeyPress    onKeyUp
event.keyCode        190            46        190
event.charCode         0            46          0
event.which          190            46        190

对于.数字键盘上的

               onKeyDown    onKeyPress    onKeyUp
event.keyCode        110            46        110
event.charCode         0            46          0
event.which          110            46        110

如您所见,使用onKeyPresscharCode检查是最统一的,这是它的 unicode 编号;String.fromCharCode(46); // ".".

在 MDN 页面有一个完整的KeyboardEvent列表,其中也有说明

注意:Web 开发人员不应在 keydown 和 keyup 事件处理程序中使用可打印键的 keycode 属性。如上所述,keycode 不能用于检查将要输入的字符,尤其是当按下 Shift 键或 AltGr 键时。当 Web 开发人员实现快捷键处理程序时,至少在 Gecko 上,按键事件是更好的事件。有关详细信息,请参阅Gecko 按键事件

您也可以在我链接到的测试页面中观察到在keyCode上使用AltGrShift以及选择的键的奇怪效果。

于 2013-07-11T01:46:37.983 回答
1

在 HTML5 中,input元素有了一个新属性:pattern. 您可以在提交表单之前指定由浏览器验证的正则表达式。

<input type="text" pattern="([0-9]+\.)?[0-9]+" />

不过,它还没有得到广泛的支持

Internet Explorer 10、Firefox、Opera 和 Chrome 支持 pattern 属性。 ( w3schools )

免责声明:表达很弱,去构建一个更好的:)

于 2013-07-11T02:12:50.187 回答
0

假设您正在使用 on key down 或 up:

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

     return true;
  }

110是小数点,190是句号

http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

这是一些测试用例的小提琴

于 2013-07-11T01:41:15.223 回答
0
<asp:TextBox ID="txt" onkeypress="return isDecimalKey(event,this)" runat="server">     


function isDecimalKey(evt,obj)
    {
       var charCode = (evt.which) ? evt.which : event.keyCode
       var value = obj.value;
       var dotcontains = value.indexOf(".") != -1;
       if (dotcontains)
           if (charCode == 46) return false;
       if (charCode == 46) return true;
       if (charCode > 31 && (charCode < 48 || charCode > 57))
           return false;
    }

在 MVC 中

 @Html.TextBoxFor(m => m.fieldName, new { htmlAttributes = new { @class = "form- 
 control forDecimal" }})

 $(document).on("keypress", ".forDecimal", function (evt) {
       var charCode = (evt.which) ? evt.which : event.keyCode
       var value = $(this).val();

        var dotcontains = value.indexOf(".") != -1;
        if (dotcontains)
            if (charCode == 46) return false;
        if (charCode == 46) return true;
    if (charCode > 31 && (charCode < 48 || charCode > 57))
           return false;
});
于 2021-01-05T05:59:25.713 回答