您可以.on()
使用 jQuery 1.7.x 尝试此委托事件处理程序,因为live()
已弃用。
委托事件的语法.on()
是:
$(container).on(eventNaem, target, eventHandler)
在这里,container
指向任何Static-element
不会动态显示在 DOM 中的内容。
$(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
您正在处理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)
目标:是的,我的目标不是在输入中输入多个点(@user)
完整代码
$('.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;
}
工作样本