You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站登录表单验证错误消息无法显示,请求技术排查

表单验证错误消息不显示问题排查

问题描述

跟着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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:00:45