我正在使用 Javascript 来限制各种文本输入字段的字符,以作为客户端验证的一种形式以及提高可用性。我正在使用以下代码来执行此操作:
function validNumbers(caller) {
var exp = /^[\d.]+/g;
var str = '';
if (caller.value.match(exp)) {
str = caller.value.match(exp).toString();
} else {
str = '';
}
str = str.replace(/\D/g,'');
caller.value = str;
}
我用 onkeypress="validNumbers(this);" 调用这个函数 而且,在大多数情况下,它就像一个魅力。问题是,当我在字段中键入无效字符时,字段的值似乎会更新(从 Javascript 的角度来看),但字符仍然存在,直到我按下下一个键,此时它是视觉上替换为下一个键的值,即使下一个键也是无效的。期望的效果是,当按下无效键时,无效值甚至不会在视觉上显示出来。我该如何做到这一点?
编辑:我选择了下面的答案,因为它让我走上了正轨。我确实必须确保将 e.shiftKey 添加到我的排除事件列表中,以防止出现“!@#$%^&*()_+”之类的字符,但这对我来说不是问题靠我自己。