Javascript字符限制 - 无效字符暂时显示

时间:2011-10-19 00:44:46

标签: javascript validation usability character-replacement

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

1 个答案:

答案 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