我使用以下函数进行十进制验证,它在 IE 和 Chrome 中运行良好,但在 FF 中运行良好。退格键和删除键在 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;
}
如果条件仅在 FireFox 中不起作用。这用于输入唯一的一个点符号
if (event.which == 50 ||(event.which == 8 || event.which == 46) && o.indexOf('.') == -1) {
return true;
}
最佳答案
一般来说,这种类型的验证需要小心进行,因为可以通过键盘以外的方式将文本更改为输入(例如,粘贴、文本拖动和上下文菜单中的删除选项)。提交表单时,限制键盘输入仍需要伴随适当的验证。
使用 keyCode
检测实际按下的键(通常在 keydown
或 keyup
而不是 keypress
中)和which
检测输入的字符(仅在 keypress
事件中)。一般来说,查看 keypress
事件的 keyCode
属性不是一个好主意,但对于删除和退格的情况,这很好:并非所有浏览器都会触发 keypress
这些键的事件,但对于那些键,keyCode
属性是一致的。
总结:将 (event.which == 8 || event.which == 46)
更改为 (event.keyCode == 8 || event.keyCode == 46)
其他保持不变。
这是我见过的 JavaScript 关键事件的最佳引用:http://unixpapa.com/js/key.html
关于javascript - javascript 退格和删除在 IE 中工作,而不是在 FireFox 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11257488/