从数字键盘检测十进制(点)键

Álv*_*lez 5 javascript keyboard jquery

我需要检测用户是否按下了数字小键盘中的点键。我写了这个对我有用的初稿:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
(function($){
    var knownCodes = [
        [110, 46], // Firefox, IE, Chrome
        [78, 46] // Opera
    ];
    var pressedCodes = [null, null];

    $.fn.comma = function(){
        this.live("keydown", function(e){
            pressedCodes = [e.which, null];

        }).live("keypress", function(e){
            pressedCodes[1] = e.which;

            for(var i=0, len=knownCodes.length; i<len; i++){
                if(pressedCodes[0]==knownCodes[i][0] && pressedCodes[1]==knownCodes[i][1]){
                    $("#log").append("<li>Decimal key detected</li>");
                    break;
                }
            }
        });

        return this;
    };
    $(function(){
        $('<ol id="log"></ol>').appendTo("body");
    });
})(jQuery);

jQuery(function($){
    $(".comma input:text, .comma textarea").css("border", "1px solid black").comma();
});
//--></script>
</head>
<body>

    <form action="" method="get" class="comma" size="20">
        <p><input type="text"></p>
        <p><textarea rows="3" cols="30"></textarea></p>
    </form>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是,我只能在带有西班牙语键盘的 Windows XP 盒子中对其进行测试。我的问题是:

  1. 从中读取是否安全e.which?我使用它,因为两者e.keyCodee.charCode返回undefined在至少一个浏览器。

  2. 操作系统是否以某种方式影响这些数字代码,或者它只是浏览器的东西?

  3. 这些代码是否取决于键盘布局?


背景信息:我找不到一个 jQuery 插件来重新映射数字键盘,所以我正在编写自己的。

更新

我会解释我的确切需求。带有数字小键盘的西班牙语键盘有一个.键。但是,西班牙语中的小数点分隔符是,. 这使得在 Web 应用程序中键入数字很烦人。某些桌面应用程序(如 MS Excel)重新映射此键,因此它会插入一个逗号。我试图模仿那个。

我已经改编了一个我一直用来发布在这里的小脚本。这就是我获得 knownCodes 数组值的方式:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
(function($){
    $.fn.showKeyCodes = function(){
        var log = function(e){
            $("<li></li>").text(e.type + "(): [keyCode, charCode, which]=[" + e.keyCode + ", " + e.charCode + ", " + e.which + "]").appendTo("#log");
        }

        this.live("keydown", function(e){
            log(e);

        }).live("keypress", function(e){
            log(e);

        }).live("keyup", function(e){
            log(e);

        });

        return this;
    };
    $(function(){
        $('<ol id="log"></ol>').appendTo("body");
    });
})(jQuery);

jQuery(function($){
    $(".showKeyCodes input:text, .showKeyCodes textarea").css("border", "1px solid black").showKeyCodes();
});
//--></script>
</head>
<body>

    <form action="" method="get" class="showKeyCodes" size="20">
        <p><input type="text"></p>
        <p><textarea rows="3" cols="30"></textarea></p>
    </form>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

键入.数字小键盘中的键(或键盘布局中替换它的任何键)以及与字母小键盘中相同字符对应的键。目标是检测您点击了第一个而不是第二个。

Jan*_*nen 1

你的代码对我来说没有做任何事情,所以我想说它可能确实取决于键盘布局。快速检查确认我的芬兰 qwerty 键盘上的输出是键码 44,而不是预期的 46。