仅允许表单字段中的数字或小数点

时间:2013-07-11 01:38:35

标签: javascript forms

我已经将输入字段限制为仅通过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 个答案:

答案 0 :(得分:8)

代码取决于您正在收听的事件,通过使用带有测试输入的 JavaScript 事件KeyCode测试页here,您可以轻松找到所需内容。完全停止(右移左.)你有

               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

正如您所看到的,使用 charCode 检查 onKeyPress 是最统一的,这是它的unicode号码; String.fromCharCode(46); // "."

还有一个full list on the MDN page for KeyboardEvent,其中也有说明

  

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

您可以使用我链接到的测试页中选择的键,观察在 keyCode 上使用 AltGr Shift 的奇怪效果好。

答案 1 :(得分:1)

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

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

尚未得到广泛支持

  

Internet Explorer 10,Firefox,Opera和Chrome支持模式属性。   w3schools

免责声明:表达力弱,建立更好的一个:)

答案 2 :(得分:0)

假设您正在使用按键或向上按键:

  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

Heres a fiddle with some test cases

答案 3 :(得分: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;
});