仅将输入框限制为数字,数字键盘键不起作用

时间:2013-09-10 16:40:16

标签: javascript

我需要你的帮助,

javascript编码完美无缺地实现了预期的结果,但由于某种原因,它不允许数字键盘上的键输入到输入框中。大多数用户使用键盘上的numlock键输入数字。如何修改编码,以便键盘上单独的数字键盘上的按键能够正常工作?

<!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>

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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所说,你可能需要处理不同的keyCodes。

答案 2 :(得分:0)

证明支持array.indexOf(数组):

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 }

                }
            }
相关问题