我使用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添加到我的排除事件列表中,以防止出现“!@#$%^& *()_ +”之类的字符,但这对我来说不是一个问题我独自一人。
答案 0 :(得分:1)
在您的函数中,您将在将值输入文本字段并进行评估后清除该值。相反,您需要阻止它完全进入文本字段。要实现此目的,您需要使用keydown的preventDefault()
方法:
onkeydown="function(e) { validNumbers(e); }"
function validNumbers(e) {
if (e.keyCode == 1 || e.keyCode == 2 ... etc) {
e.preventDefault();
}
}
这将阻止特定字符(reference here)进入输入字段。请注意,这不会阻止复制和粘贴,因此您仍然需要评估整个字符串'onpaste'或使用类似的事件处理程序阻止'onpaste'。
这也不是一个跨领域的解决方案,但应该让你的脚湿润。有关实例,请参阅此JSFiddle。