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