【问题标题】:Javascript keycode =/= charcodeJavascript 键码 =/= 字符码
【发布时间】:2010-12-25 15:56:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      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】:

      没错。您无法进行此类映射; keydown 甚至可能与插入的字符不对应。或者 Caps Lock 可能会改变按键的含义,而您无法对此进行嗅探。还有various other wrinkles

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

      【讨论】:

      • 这也是我的结论。但是,根据quirksmode.org/js/keys.html 的说法,Firefox 似乎没有正确处理按键事件。我有点卡在这个问题上:-/
      • 关于按键的另一件事,我得到了相同的代码期间和删除键(不是退格键):46。这对我来说是一个大问题:(使用英文Windows XP,英文Firefox,比利时键盘,比利时映射。
      • Firefox 的按键很好,只需使用通常的event.which 来获取字符。然后为 IE 的 charCode-in-keyCode 行为添加后备。例如。 var c= 'which' in event? event.which : event.keyCode;
      • 是的,有很多键也有奇怪的键码。我不太确定您要做什么,但是如果是数字验证键盘事件,则这样做是错误的。
      • 我正在尝试过滤文本框上的输入以仅允许一组字符。目前,我正在研究数字过滤器(我允许负数和/或十进制数)。 Bobince,欢迎任何关于如何更好地做到这一点的线索:)
      猜你喜欢
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2011-02-21
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多