强制仅限数字的js函数不'不适用于Firefox,但适用于Chrome;IE运行良好

Force numeric only js function doesn't work in Firefox but in Chrome & IE works fine

本文关键字:适用于 不适用 Firefox Chrome 运行 IE 数字 js 函数      更新时间:2023-09-26

我有一个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里有个虫子吗?还是我的?

我有火狐22。

例如,请看一下:http://jsfiddle.net/TR8t4/

正如@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供您参考。

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

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