使用Overtype / Insert键进行JavaScript Max Length验证

时间:2011-11-09 05:23:36

标签: javascript internet-explorer javascript-events

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

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

除了用户按下插入键以打开改写类型并且它们已达到最大长度之外,代码工作正常。当发生这种情况时,如果他们将光标放在字符之前并尝试覆盖它,则验证会认为这将超出限制并且没有意识到字符实际将被替换。

answer表示我无法检测是否打开了改写类型,但未提供任何引用。因此,假设我无法检测到改写类型,那么onkeydown事件中是否存在检测字符是否将被替换的情况。

我对IE唯一解决方案感到满意。

更新onblur不合适,因为这会让他们超过限制多个字符,然后警告他们最大长度。我想阻止他们超越极限。

2 个答案:

答案 0 :(得分:1)

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

这与您现在所拥有的不同,可能会在达到最大长度时阻止按键。不要阻止按键,只需修剪结果字符串。

答案 1 :(得分:1)

我认为您的问题不在于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另一方面做得过头。但是,它似乎是页面特定的,例如,如果我在页面A上启用了插入,它似乎不会影响页面B.我发现this page似乎能够抓取键码事件,即使插入已经被迫了。可能是由于以下代码?

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

无论哪种方式,上面的链接似乎已经解决了问题,如果上述情况不正确,希望它能得到答案。

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