簡體   English   中英

強制僅數字js函數在Firefox中不起作用,但在Chrome和IE中可以正常工作

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

我有一個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中的錯誤嗎? 還是我的?

我有Firefox 22。

示例,請看一下: http : //jsfiddle.net/TR8t4/

是的,這是Firefox中的錯誤。 當您使用編輯鍵和箭頭鍵時,它將觸發keypress事件。 這些鍵應該觸發keydown ,但不keypress

QuirksMode的兼容性列表中列出了此錯誤行為。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM