重载类型/插入键的JavaScript最大长度验证
JavaScript Max Length Validation with Overtype/Insert Key
我正在尝试编辑一些现有的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.
}
不管怎样,上面的链接似乎已经解释了问题,如果上面的链接不正确,希望它能给出答案。
希望我没有误解问题是什么,这有帮助。
- 验证Javascript中的Textarea
- 表单验证JavaScript编号总是返回false
- 验证javascript中的输入没有'不起作用
- 验证JavaScript中是否存在变量
- 验证javascript中的输入是否在2个数字之间
- 禁止的正则表达式._或.-(电子邮件验证/javascript)
- 表单验证Javascript没有响应
- 用于验证 JavaScript 中的字母数字值的正则表达式
- 如何使用正则表达式验证 JavaScript 中的自定义 URL
- 按 ID 验证 JavaScript 中的列表框和单选按钮
- 如何验证 JavaScript 和 html 代码
- 表单验证 - Javascript 删除空格电话号码
- 用于验证 JavaScript 中的条件的正则表达式
- 仅当浏览器无法验证表单时才使用表单验证 JavaScript
- 多个复选框验证 JavaScript
- 验证 Javascript 中的多个部分
- 使用 Jquery 验证 JavaScript 对象是否为空
- 警报框中的基本验证 Javascript
- 登录验证 JavaScript 无法正常工作
- 验证 JavaScript 正则表达式