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

相关问题