Jquery Javascript键代码=/=charcode

Jquery Javascript键代码=/=charcode,jquery,cross-browser,cross-platform,jquery-events,Jquery,Cross Browser,Cross Platform,Jquery Events,我正在使用jQuery绑定keydown事件,以允许文本框中包含一些特定字符。我正在努力使我的代码跨浏览器和平台兼容。我的主要问题是,我找不到一种方法将收到的键码映射到有效的字符码,特别是对于来自数字键盘的键码(十进制分隔符,是逗号还是句点等)。这是正确的。没有这样的映射你可以做;向下键甚至可能与插入的字符不对应。或者Caps Lock可能会改变按键的含义,而您无法嗅到这一点。和 如果您想知道字符代码,您唯一的选择就是使用按键事件。如果您的问题是将按键代码转换为字符,为什么不让浏览器为您处理呢?

我正在使用jQuery绑定keydown事件,以允许文本框中包含一些特定字符。我正在努力使我的代码跨浏览器和平台兼容。我的主要问题是,我找不到一种方法将收到的键码映射到有效的字符码,特别是对于来自数字键盘的键码(十进制分隔符,是逗号还是句点等)。

这是正确的。没有这样的映射你可以做;
向下键
甚至可能与插入的字符不对应。或者Caps Lock可能会改变按键的含义,而您无法嗅到这一点。和


如果您想知道字符代码,您唯一的选择就是使用按键事件。

如果您的问题是将按键代码转换为字符,为什么不让浏览器为您处理呢?这听起来可能很可怕,但您可以简单地允许浏览器修改文本框(这样删除就是删除,句点就是句点),然后返回并编辑它。。。嗯。。。也许是这样的:

function hookEvents() {
    $('#myTextBox').oldValue = $('#myTextBox').value;
    $('#myTextBox').bind('keyup', function(event) {
        // Maybe nothing's changed?
        if (event.target.oldValue == event.target.value) {
            return;
        }

        var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/;
        var input = event.target.value;
        var result = validInput.exec(input);
        if (result.index != 0 || result[result.length-1] != input.length) 
        {
            event.target.value = result[0];
        }

        // update for later
        event.target.oldValue = event.target.value;
    });
}
这种方法最大的问题是,每按一个键都会在屏幕上出现片刻。另一方面,使用正则表达式,您可以更好地控制允许输入的格式。在上面的示例中,我只允许正数或负数(带有可选的小数点)。例如:“123”、“-123”、“-123.456”、“123.456”


我知道这并不能真正回答你的问题,但它完全回避了这个问题

好吧,就像我在评论中说的,这个问题背后的目的是过滤一个关于数值的文本框。我通过按键事件实现了我的目标


我为那些对解决方案感兴趣的人发表了一篇文章。

这也是我的结论。但是,据报道,Firefox似乎没有正确处理按键事件。我在这个问题上有点纠结:-/keypress还有一件事,我得到的句号和delete键(不是backspace)的代码是相同的:46。这对我来说是个大问题:(使用英语Windows XP、英语Firefox、比利时键盘、比利时映射。Firefox的按键很好,只需使用通常的
事件。which
来获取字符。然后在keyCode行为中为IE的charCode添加回退。例如
var c='which'in event?event.which:event.keyCode;
是的,有很多键都是奇数键。)代码也是。我不太确定你想做什么,但如果是数字验证,键盘事件是错误的。我正在尝试过滤文本框上的输入,以仅允许一组字符。目前,我正在处理数字过滤器(我允许负数和/或十进制数).Bobince,任何关于如何更好地做到这一点的线索都是受欢迎的:)很有趣,但正如你所说的,这个角色首先会在文本框中出现。这是我不想要的。