JavaScript实现表单验证时密码长度校验不生效且控制台无报错如何解决
问题根因
- 你通过
document.getElementsByClassName获取的passwordd是输入框DOM元素对象,而非用户输入的密码内容,DOM元素本身没有length属性,读取passwordd.length会得到undefined,数字和undefined做比较的结果恒为false,所以判断条件永远不会触发,且该操作不属于语法错误,因此控制台无报错。 - 原有逻辑中仅在输入框没有
is-invalid类时才做校验,意味着一旦触发过错误提示,后续用户修改密码后也不会重新校验,属于潜在逻辑漏洞。
修复方法
- 长度判断时优先读取输入框的
value属性获取用户输入内容,建议额外调用trim()方法去除首尾空格,避免用户输入全空格类无效内容。 - 优化校验逻辑,每次输入后都重新判断合法性,不需要提前判断是否存在错误类。
修复后参考代码:
let passwordd = document.getElementsByClassName('passwordd')[0]; // 每次校验前先清空原有错误状态 passwordd.classList.remove('is-invalid'); const passwordVal = passwordd.value.trim(); if(passwordVal.length < 6 || passwordVal.length > 16){ passwordd.classList.add('is-invalid'); errMsg.innerText = "Password must be at least 6 characters and not more than 16 characters."; }
内容的提问来源于stack exchange,提问作者user16487855
相关产品推荐
相关产品推荐

