0

我正在使用 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 添加到我的排除事件列表中,以防止出现“!@#$%^&*()_+”之类的字符,但这对我来说不是问题靠我自己。

4

1 回答 1

1

在您的函数中,您将在将值输入文本字段并进行评估后清除该值。相反,您需要阻止它完全输入到文本字段中。为此,您需要使用 keydown 的preventDefault()方法:

onkeydown="function(e) { validNumbers(e); }"

function validNumbers(e) {
    if (e.keyCode == 1 || e.keyCode == 2 ... etc) {
        e.preventDefault();
    }
}

这将阻止特定字符(参考此处)进入输入字段。请注意,这不会阻止复制和粘贴,因此您仍然需要评估整个字符串“onpaste”或使用类似的事件处理程序阻止“onpaste”。

这也不是一个跨浏览器的解决方案,但应该让你的脚充分湿透。请参阅此JSFiddle以获取实时示例。

于 2011-10-19T04:59:22.683 回答