2013-08-06 142 views
0

我有拒絕任何字符,除了數字一個一個JavaScript函數:力數值只js函數無法在Firefox,但在Chrome瀏覽器和IE瀏覽器工作正常

$(".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(); 
    } 
} 

此功能允許用戶(如果使用了鍍鉻/ IE)選擇數字的任何部分(使用SHIFT鍵)並更改選定的數字/字母。

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

再次,在Chrome和IE(甚至IE8)工作正常。有誰知道是Direfox中的一個錯誤?或者它來自我?

我的Firefox 22

例子,看看在:http://jsfiddle.net/TR8t4/

+0

即時將關鍵代碼轉換爲字符串,即使它是特殊字符(如Backspace或箭頭),然後檢查它是否爲數字。你應該只打印字符。 – Barmar

+0

爲什麼在Chrome瀏覽器甚至IE瀏覽器上都可以使用?我現在使用Safari和Opera進行測試,並使用上述代碼完美工作。 –

+1

event.which http://api.jquery.com/event.which/ –

回答

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,供大家參考。

0

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

此不正確的行爲在QuirksMode的兼容性列表中列出。

+0

我現在用'which'而不是'keyCode',但我仍然不能使用退格或刪除,甚至使用'keydown'事件 –

+0

爲什麼你認爲這會有所幫助?問題不在於解碼密鑰,問題在於當按下這些按鍵時事件不應該觸發。 – Barmar

相關問題