Javascript Force numeric only js函数在Firefox中不起作用,但在Chrome&IE中效果良好

Javascript Force numeric only js函数在Firefox中不起作用,但在Chrome&IE中效果良好,javascript,jquery,Javascript,Jquery,我有一个javascript函数,它拒绝除数字字符以外的任何字符: $(".number").keypress(this.EnsureNumbers); EnsureNumbers: function (event) { var value = $(this).first().val(); value = value.substring(0, $(this)[0].selectionStart) + String.fromCharCode(event.keyCode) + val

我有一个javascript函数,它拒绝除数字字符以外的任何字符:

$(".number").keypress(this.EnsureNumbers);

EnsureNumbers: function (event) {
   var value = $(this).first().val();

   value = value.substring(0, $(this)[0].selectionStart) + String.fromCharCode(event.keyCode) + value.substring($(this)[0].selectionEnd);
   if (!value.match(/^\d+$/)) {
      event.preventDefault();
   }
}
此功能允许用户使用Chrome/IE通过SHIFT键选择数字的任何部分,并更改所选数字/字母

但在Firefox中,这种方法不允许我按Backspace键或使用左/右键

同样,在Chrome和IE中,甚至IE8也可以正常工作。有人知道Direfox里有个bug吗?还是我的

我有Firefox22


例如,看一看:

是的,这是Firefox中的一个bug。当您使用编辑键和箭头键时,它会触发按键事件。这些键应该触发keydown,但不能触发keypress


这种不正确的行为列在兼容性矩阵中。

正如@Barmar所说,它在Mozilla FF中是不正确的行为

有一次我也遇到过这样的问题。但我通过检测像$.browser.mozilla这样的浏览器解决了这个问题。尽管在最新版本的jQuery中,这一点已经被降低了

我所做的就是在这里

$('selector').keypress(function(event){              
                if($.browser.mozilla == true){                      
                      if (event.keyCode  == 8 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 9 || event.keyCode == 16 || event.keyCode == 46){
                            return true;
                      }
                }
                if (event.which < 48 || event.which > 57) {                     
                    event.preventDefault();                    
                  }
            });

供您参考。

您正在将键代码转换为字符串,即使它是退格或箭头等特殊字符,然后检查它是否为数字。你应该只在打印字符的时候才这样做。那为什么在Chrome甚至IE上都能工作呢?我现在在Safari和Opera上进行了测试,使用上面的code.event可以完美地工作。您为什么要这样做呢[0]?这是没有意义的,只需这样做,我现在用它来代替keyCode,但我仍然不能使用backspace或delete,甚至不能使用keydown事件为什么你认为这会有帮助?问题不在于解码键,错误在于当按下这些键时,事件根本不应该触发。