【问题标题】:Restricting input box to numbers only, number keypad keys do not work [duplicate]将输入框仅限于数字,数字键盘键不起作用[重复]
【发布时间】:2013-09-14 11:49:13
【问题描述】:

我需要你的帮助,

javascript 编码可以完美运行并达到预期的效果,但由于某种原因,它不允许将数字键盘上的键输入到输入框中。大多数用户会使用键盘上的数字锁定键输入数字。如何修改编码以使键盘上单独的数字键盘上的按键起作用?

<!DOCTYPE html>
<html>
    <body>
        <div>
            <input type="text" id="rownum">
        </div>
        <script type="text/javascript">
            document.getElementById('rownum').onkeydown = function(e) {
                var key = (window.event) ? event.keyCode : event.which;
                alert(key);
                if (key == 8) { // Delete key
                    return
                }
                else {
                    if ( isNaN( String.fromCharCode(key) ) ) return false;
                }
            }
        </script>
    </body>
</html>

【问题讨论】:

  • 它“完美无瑕”但有缺陷吗?哦,真的……

标签: javascript


【解决方案1】:

数字键盘中的数字有不同的keyCodes。其他键(如删除)在普通键盘和数字键盘中具有相同的 keyCode,但 keyCode 8(您的代码中的那个)用于退格,而不是 Delete。

【讨论】:

    【解决方案2】:

    示例代码似乎无效。我运行它并得到“事件未定义”。此代码有效:

    document.getElementById('rownum').onkeydown = function(e) {
                var key = e.keyCode || e.which; // <-- updated reference to event
                alert(key);
                if (key == 8) { // Delete key
                    return
                }
                else {
                    if ( isNaN( String.fromCharCode(key) ) ) return false;
                }
            };
    

    但正如@Portnoy 所说,您可能需要处理不同的 keyCode。

    【讨论】:

      【解决方案3】:

      证明支持array.indexOf(array):

      Array.prototype.indexOf = function(obj, start) {
           for (var i = (start || 0), j = this.length; i < j; i++) {
               if (this[i] === obj) { return i; }
           }
           return -1;
      }
      

      然后您可以应用以下内容:

                  document.getElementById('rownum').onkeydown = function(e) {
      
                      var key = (window.event) ? event.keyCode : event.which;
      
                      var keys = [8,37,39,46,96,97,98,99,100,101,102,103,104,105]
      
                      var x = (keys.indexOf(key) > -1)
      
                      if (x != true) {
      
                          if (isNaN(String.fromCharCode(key))) { return false }
      
                      }
                  }
      

      【讨论】:

        猜你喜欢
        • 2013-09-18
        • 1970-01-01
        • 2017-06-22
        • 2011-03-14
        • 2020-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-16
        相关资源
        最近更新 更多