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

Javascript character restriction - invalid characters show up temporarily

本文关键字:字符 显示 无效 Javascript      更新时间:2023-09-26

我使用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添加到排除事件列表中,以防止像"!@#$%^&*()_+"这样的字符,但这不是我自己发现的问题。

在您的函数中,您正在清除已输入文本字段并评估的值。相反,您需要完全防止将其输入到文本字段中。要做到这一点,您需要使用keydown的preventDefault()方法:

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

这将阻止特定字符(此处引用)进入输入字段。注意,这不会阻止复制和粘贴,所以你要么仍然需要计算整个字符串'onpaste',要么用类似的事件处理程序阻止'onpaste'。

这也不是一个跨浏览器的解决方案,但应该让你的脚足够湿。