Javascript密钥代码= / = char代码

时间:2009-12-11 12:47:53

标签: jquery javascript-events cross-platform cross-browser

我使用jQuery绑定keydown事件以允许文本框中的某些特定字符。我正在尝试使我的代码跨浏览器和平台兼容。我的主要问题是我找不到将接收到的密钥代码映射到有效字符代码的方法,特别是对于来自数字键盘的密钥代码(小数分隔符,是昏迷还是句号等)。 / p>

提前感谢您的帮助, 费边

3 个答案:

答案 0 :(得分:6)

这是正确的。你不能做这样的映射; keydown甚至可能与插入的字符不对应。或者Caps Lock可能会改变按键的含义,你无法嗅到它。并various other wrinkles

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

答案 1 :(得分:1)

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

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;
    });
}

这种方法的最大问题是按下的每个按键都会出现在屏幕上一会儿。另一方面,使用REGEX,您可以更好地控制允许输入的格式。在上面的例子中,我只允许正数或负数(带有可选的小数点)。如:“123”,“ - 123”,“ - 123.456”,“123.456”。

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

答案 2 :(得分:1)

好吧,就像我在评论中所说的那样,这个问题背后的目标是过滤数值上的文本框。我设法使用按键事件达到目标。

我已经为那些对解决方案感兴趣的人发布了jQuery plug-in