6

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

4

3 回答 3

6

那是对的。您无法进行此类映射;akeydown甚至可能不对应于插入的字符。或者 Caps Lock 可能会改变按键的含义,而您无法对此进行嗅探。和其他各种皱纹

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

于 2009-12-11T13:56:48.647 回答
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”。

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

于 2009-12-14T09:16:30.123 回答
1

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

我为那些对此解决方案感兴趣的人发布了一个jQuery 插件。

于 2009-12-15T09:41:29.217 回答