网站登录表单验证错误消息无法显示,请求技术排查
表单验证错误消息不显示问题排查
问题描述
跟着YouTube上的基础表单验证教程完成登录表单开发后,测试时发现JavaScript中的错误消息无法在页面上显示,期望错误消息能显示在登录表单上方。
问题原因及修复方案
1. 表单事件监听错误
你给表单绑定了Login事件,但表单提交的标准触发事件是submit,这会导致验证逻辑根本不会执行。
修复:
把form.addEventListener ('Login', (e) => {改为form.addEventListener ('submit', (e) => {
2. 按钮onclick属性冲突
两个按钮都添加了onclick="check(this.form)",但你并未定义check函数,且该属性会干扰表单的submit事件监听,导致验证逻辑失效。
修复:
移除两个按钮上的onclick="check(this.form)"属性;另外注册按钮建议改为type="button",避免触发表单提交。
3. JS文件路径问题
你使用了本地绝对路径C:\Users\John\Downloads\capstone project\sitescript.js,浏览器会限制本地文件的直接访问,可能导致JS文件加载失败。
修复:
改为相对路径,若sitescript.js和HTML文件在同一文件夹下,写成<script defer src="sitescript.js"></script>即可。
4. 错误消息样式优化(可选)
当前error元素未应用你CSS中定义的.alert类,消息显示可能不够醒目。
修复:
把<div id="error"></div>改为<div id="error" class="alert"></div>
修正后的完整代码
JavaScript
const username = document.getElementById('Username') const password = document.getElementById('Password') const form = document.getElementById('form') const errorElement = document.getElementById('error') // 修正事件类型为submit form.addEventListener ('submit', (e) => { let messages =[] if (username.value === '' || username.value == null){ messages.push('用户名不能为空') } if (password.value.length <= 6){ messages.push('密码长度必须大于6位') } if (password.value.length >= 20){ messages.push('密码长度不能超过20位') } if (password.value === 'password'){ messages.push('密码不能是"password"') } if (messages.length > 0){ e.preventDefault() errorElement.innerText = messages.join(', ') } })
HTML
<!DOCTYPE HTML> <html lang="en"> <head> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <link href="sitestyle.css" rel="stylesheet" type="text/css"> <!-- 改为相对路径 --> <script defer src="sitescript.js"></script> <title>Excell Visualizer</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <div class="sidenav"> <div class="login-main-text"> <h2>Chartcel <br> 登录页面 </h2> <p>登录或注册后即可上传你需要的电子表格。</p> </div> <div class="main"> <div class="col-md-6 col-sm-12"> <div class="login-form"> <form id="form"> <!-- 添加alert类优化样式 --> <div id="error" class="alert"></div> <div class="form-group"> <label for="username"> 用户名 </label> <input type="text" class="form-control" id="Username"> </div> <div class="form-group"> <label>密码</label> <input type="password" class="form-control" id="Password"> </div> <!-- 移除onclick属性 --> <button type="submit" class="btn btn-black">登录</button> <!-- 改为button类型避免提交表单 --> <button type="button" class="btn btn-secondary"> 注册</button> </form> </div> </div> </div> </div> </body> </html>
CSS(无需修改,保留原代码)
body { font-family: "Lato", sans-serif; } .main-head { height: 150px; background: #FFF; } .sidenav { height: 100%; background-color: #680C07; overflow-x: hidden; padding-top: 20px; width: 100%; } .main { padding: 0px 10px; } @media screen and (max-height: 450px) { .sidenav { padding-top: 15px; } } @media screen and (max-width: 450px) { .login-form { margin-top: 10%; } .register-form { margin-top: 10%; } } @media screen and (min-width: 768px) { .sidenav { position: fixed; z-index: 1; top: 0; left: 0; } .login-form { margin-top: 80%; } .register-form { margin-top: 20%; } } .login-main-text { margin-top: 20%; padding: 60px; color: #fff; } .login-main-text h2 { font-weight: 300; } .btn-black { background-color: #000 !important; color: #fff; } .login-form { margin-top: 20%; padding: 20px; } .form-group { margin-bottom: 20px; } .btn { margin-top: 20px; } .alert { color: #31708F; background-color: #D9EDF7; border-color: #BCE8F1; }
内容的提问来源于stack exchange,提问作者Slats_
相关产品推荐
相关产品推荐

