Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带改写/插入键的JavaScript最大长度验证_Javascript_Internet Explorer_Javascript Events - Fatal编程技术网

带改写/插入键的JavaScript最大长度验证

带改写/插入键的JavaScript最大长度验证,javascript,internet-explorer,javascript-events,Javascript,Internet Explorer,Javascript Events,我正在尝试编辑一些现有的JavaScript验证代码 使用onkeydown事件,代码检查文本框中的值是否超过最大长度。我不能使用,因为字符串中可能有一些格式字符,我可以安全地从最大长度中排除 除了当用户按下insert键打开改写并且代码达到最大长度时,代码工作正常。当出现这种情况时,如果他们将光标放在一个字符之前并试图覆盖它,验证认为这将超过限制,并且没有意识到一个字符实际上将被替换 这说明我无法检测是否启用了overtype,但没有提供任何引用。因此,假设我无法检测改写,那么在onkeydo

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

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

除了当用户按下insert键打开改写并且代码达到最大长度时,代码工作正常。当出现这种情况时,如果他们将光标放在一个字符之前并试图覆盖它,验证认为这将超过限制,并且没有意识到一个字符实际上将被替换

这说明我无法检测是否启用了overtype,但没有提供任何引用。因此,假设我无法检测改写,那么在
onkeydown
事件中是否仍有检测字符是否将被替换的方法

我对IE唯一的解决方案很满意


更新
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;
    }

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


希望我没有误解问题所在,这有帮助。

我已经更新了我的帖子。我实际上想使用onkeydown而不是onblur,这样我就可以捕捉到用户超过限制的确切时刻。我现有的onkeydown看起来与您发布的内容类似,但这不适用于改写;我更新了我的帖子,提到我实际上在使用onkeydown。只有在我能够确定(或假设)已打开改写时,使用子字符串和插入符号位置才会起作用。我不介意在达到最大长度时将文本框视为“改写”始终处于打开状态,但这种情况会破坏用户界面体验,因为用户不会期望出现这种行为。
if(window.event) {
    event = window.event; //where event is the javascript key event.
}