1

我使用以下函數進行十進制驗證,它在IE和Chrome中工作正常,沒有在FF.Backspace和刪除鍵在IE和Chrome中工作。沒有在FireFoxjava腳本退格和刪除工作在IE瀏覽器,不在火狐

$('.decimalValidate').live('keypress', function (e) { 
     var decimalid = $(this).attr("id"); 
     var decimalval = $('#' + decimalid).val(); 

     var decimalvalidate = ApplyDecimalFilter(decimalval, e); 
     if (decimalvalidate == false) return false; 
    }); 



    function ApplyDecimalFilter(id, event) 
     { 
      try { 
       return NewDecimalFilter(id, event); 
      } catch (e) { 
       alert(e.message); 
      } 
     } 

    function NewDecimalFilter(o, event) { 
      if (event.which > 47 && event.which < 58) { 
       return true; 
      } 
      if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1) { 
       return true; 
      } 
      return false; 
     } 

這一點,如果條件在FireFox不工作時內整合用於輸入唯一的一個點符號

if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1) { 
       return true; 
      } 
+0

只是想知道,什麼當用戶發生粘貼或拖動文本到你的輸入字段?不使用鍵盤。 –

回答

2

一般情況下,這種類型的驗證需要被小心進行,因爲文字可以被改變成通過除鍵盤以外的輸入(粘貼,文本拖動和Delet例如,在上下文菜單中的e選項)。提交表單時,限制鍵盤輸入仍然需要伴隨適當的驗證。

用於檢測按壓的實際鍵(通常在​​或keyup而非keypress)和which檢測類型(只在keypress事件)的字符使用keyCode。一般來說,查看keypress事件的keyCode屬性並不是一個好主意,但是對於刪除和退格的情況,它很好:並非所有瀏覽器都爲這些密鑰觸發keypress事件,但對於那些事件,keyCode屬性是一致的。

總結:將(event.which == 8 || event.which == 46)更改爲(event.keyCode == 8 || event.keyCode == 46),剩下的一樣。

這是我見過的對JavaScript的關鍵事件的最佳參考:http://unixpapa.com/js/key.html

1

$('#Name_Var').keypress(function (event) { 
 
    event = event || window.event; 
 
    var charCode = event.which || event.keyCode; 
 
    var charStr = String.fromCharCode(charCode); 
 
    // FireFox key Del - Supr - Up - Down - Left - Right 
 
    if (event.key !== undefined && event.charCode === 0) { 
 
     return; 
 
    } 
 
    //Only Num 
 
    if (!/^([0-9])*$/.test(charStr)) { 
 
     event.preventDefault(); 
 
    } 
 
    //Num and letters 
 
    if (!/^[a-zA-Z0-9]+$/.test(charStr)) { 
 
     event.preventDefault(); 
 
    } 
 
});

相關問題