代码之家  ›  专栏  ›  技术社区  ›  Fabian Vilers

javascript密钥代码=/=char代码

  •  6
  • Fabian Vilers  · 技术社区  · 15 年前

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

    提前感谢您的帮助, 费边

    3 回复  |  直到 15 年前
        1
  •  6
  •   bobince    15 年前

    没错。没有这样的映射可以做;a keydown 甚至可能与插入的字符不对应。或者CapsLock可能会改变按键的含义,而您无法嗅探到这一点。和 various other wrinkles .

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

        2
  •  1
  •   Shalom Craimer    15 年前

    好吧,如果你的问题是把密码翻译成字符,为什么不让浏览器帮你处理呢?这听起来可能很可怕,但您只需允许浏览器修改文本框(这样,删除就是删除,句点就是句点),然后返回并编辑它…嗯。。。可能是这样的:

    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”。

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

        3
  •  1
  •   Fabian Vilers    15 年前

    正如我在评论中所说,这个问题背后的目标是过滤数值文本框。我通过按键活动达到了我的目标。

    我发表了一篇 jQuery plug-in 对于那些对解决方案感兴趣的人。

    推荐文章