重载类型/插入键的JavaScript最大长度验证

JavaScript Max Length Validation with Overtype/Insert Key

本文关键字:验证 JavaScript 类型 插入键 重载      更新时间:2023-09-26

我正在尝试编辑一些现有的JavaScript验证代码。

使用onkeydown事件,代码检查文本框中的值是否超过最大长度。我不能使用<input maxlength="value" />,因为字符串中可能有一些格式化字符,我可以安全地从最大长度中排除。

代码工作得很好,除了当用户按下插入键打开覆盖键入,他们已经达到最大长度。当出现这种情况时,如果他们将光标放在字符前面并试图覆盖它,则验证认为这将超出限制,并且没有意识到实际上将替换字符。

这个回答说明我无法检测overtype是否打开,但是没有提供任何引用。所以假设我不能检测过类型,无论如何在onkeydown事件中检测一个字符是否要被替换。

我很高兴只有IE解决方案。

Update: onblur是不合适的,因为这会让他们在警告他们最大长度之前超过限制许多字符。我想阻止他们超过限制

处理程序应该查看整个值并检查长度。如果长度合法,则返回。如果没有,可以使用子字符串更新该值。您可能必须使用插入符号位置来确定如何操作字符串,这可能很棘手,因为它在IE和其他浏览器中略有不同。

这与你现在所拥有的不同,当达到最大长度时可能会阻止按键。

我不认为你的问题是与onblur验证,但一个事件,你调用按键的声音(例如阻止用户再键一旦他们达到限制),或者我有误解。

如果你的验证确实是onblur,你不应该担心插入/覆盖被启用,你只对input元素的值是什么感兴趣,一旦用户完成了他们的输入。

如果你试图阻止用户,如果他们达到了这个限制,我会写一个函数来计算你正在测试的实际长度。例如,

function validateMyInput() {
    var myInputField = document.getElementById('myInput');
    var removeAllExcludedCharsResult = myInputField.value.replace('&','');//exclude &
    var totalLength = removeAllExcludedCharsResult.length;
    if(totalLength < 500) { //limit of this test is 500
        return true;
    }
    else {
return false;
    }
}

显然,将此函数更改为您需要的内容,并可能通过传递输入元素,最大长度和排除字符数组使其更通用,以使其可重用。

我已经测试了这个问题是Chrome和插入键似乎被忽略了。另一方面,IE做了overkey。然而,它似乎是特定于页面的,例如,如果我在页面A上启用了插入,它似乎并不影响页面b。我发现这个页面似乎能够抓取键码事件,即使插入已被按下。这可能是由于以下代码?

if(window.event) {
    event = window.event; //where event is the javascript key event.
}

不管怎样,上面的链接似乎已经解释了问题,如果上面的链接不正确,希望它能给出答案。

希望我没有误解问题是什么,这有帮助。