我使用以下函数进行十进制验证,它在IE中工作正常,Chrome不在FF.Backspace中,删除键在IE和Chrome中工作。在FireFox中没有。
$('.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;
}
此if条件仅在FireFox中不起作用。这用于输入唯一一个点符号
if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1) {
return true;
}
答案 0 :(得分:2)
通常,这种类型的验证需要谨慎进行,因为文本可以通过键盘以外的方式更改为输入(例如,粘贴,文本拖动和上下文菜单中的“删除”选项)。提交表单时,限制键盘输入仍需要进行适当的验证。
使用keyCode
检测按下的实际按键(通常位于keydown
或keyup
而非keypress
)和which
以检测所输入的字符(仅限在keypress
事件中。一般来说,查看keyCode
事件的keypress
属性并不是一个好主意,但对于删除和退格的情况,它很好:并非所有浏览器都为这些键触发keypress
事件但是对于那些,keyCode
属性是一致的。
总结:将(event.which == 8 || event.which == 46)
更改为(event.keyCode == 8 || event.keyCode == 46)
,其余部分保持不变。
以下是我见过的JavaScript关键事件的最佳参考:http://unixpapa.com/js/key.html
答案 1 :(得分:1)
String
&#13;