0

我需要你的帮助,

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

3 回答 3

0

证明支持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-10T18:04:02.803 回答
0

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

于 2013-09-10T16:49:40.987 回答
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 所说,您可能需要处理不同的密钥代码。

于 2013-09-10T16:59:13.267 回答