强制数字仅js功能在Firefox中不起作用,但在Chrome& IE运行正常

时间:2013-08-06 06:58:25

标签: 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) + value.substring($(this)[0].selectionEnd);
   if (!value.match(/^\d+$/)) {
      event.preventDefault();
   }
}

此功能允许用户(如果使用Chrome / IE)选择数字的任何部分(使用SHIFT键)并更改所选的数字/字母。

但在Firefox中,此方法不允许我按退格键或使用左/右键。

再次,在Chrome和IE(甚至IE8)中工作正常。有谁知道是Direfox中的一个错误?或者它来自我?

我有Firefox 22。

示例,请查看:http://jsfiddle.net/TR8t4/

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

正如@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();                    
                  }
            });

JSFiddle 供您参考。