我使用以下函数进行十进制验证它在IE和Chrome中工作正常。但是没有在Fire Fox中工作。如果我在火狐中运行此代码我不能输入任何字符。如何解决这个问题?
$('.decimalValidate').live('keypress', function (event) {
var decimalval= $(this).val();
if ((event.which > 47 && event.which < 58)) {
return true;
}
if ((event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1) {
return true;
}
return false;
});
这种情况在FF中不起作用
if ((event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1) {
return true;
}
答案 0 :(得分:2)
您可以使用jQuery 1.7.x尝试此 .on()
委托事件处理程序,因为不推荐使用live()
。
委托事件的.on()
语法为:
$(container).on(eventNaem, target, eventHandler)
此处,container
指向动态无法显示的任何Static-element
。
$(document).on('keypress', '.decimalValidate', function(event) {
// var decimalid = $(this).attr("id"); // I think you don't need this
var decimalval = $(this).val(); // or this.value
if ((event.which > 47 && event.which < 58)) {
return true;
}
if ((event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1) {
return true;
}
return false;
});
backspace
无效您正在使用以下条件处理backspace
和delete
:
(event.which == 8 || event.which == 46) && decimalval.indexOf('.') == -1
设置验证:
如果您的文本框中没有包含.
和backspace
或delete
键,则按下该条件块中的执行代码。
当您的文本框包含.
且按下backspace
或delete
键并且条件块不会执行任何return
语句时,上述条件将失败。
backspace
(点).
更改条件,如:
从条件
中删除&& decimalval.indexOf('.') >= -1
(event.which == 8 || event.which == 46)
$('.decimalValidate').on('keyup', function(e) {
var decimalval = $(this).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 (o.match(/\./g) && o.match(/\./g).length > 1) {
$(event.target).val(o.replace(/\.$/, ''))
return false;
}
if ((event.which > 47 && event.which < 58) || event.which == 8 || event.which == 46) {
return true;
}
return false;
}
<强> Working sample 强>