javascript - 即使出现错误,Javascript 验证也允许提交
问题描述
我有一个 HTML 表单,其中包含针对各个字段的 Javascript 验证。但是,每当我提交表单时,即使表单字段正确(即不为空或为空),我添加的错误消息也会出现。
我希望仅在表单字段为空或为空时出现错误消息。
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=0.1,shrink-to-fit=no">
<link type="text/css" href="/css" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<title>Javascript Form Validation</title>
<style>
</style>
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col-sm-6 col-md-6 col-lg-6">
<div class="card">
<div class="card-body">
<form method="post" name="myForm" id="myForm">
<div class="form-group">
<label for="exampleInputName1">Full name</label>
<input type="text" class="form-control" name="name" id="exampleInputName1" aria-describedby="nameHelp" placeholder="Enter name">
</div>
<button type="submit" name="login" class="btn btn-primary">Submit</button>
</form>
<script>
class User
{
constructor(userName,submitButton)
{
this.userName = document.myForm.name.value;
this.submitButton = document.getElementById("myForm");
}
submitForm()
{
this.submitButton.onsubmit = function()
{
if(this.userName == "" || this.userName == null)
{
document.write("Name Required");
return false;
}
}
}
}
let user = new User();
user.submitForm();
</script>
解决方案
类构造函数中的这一行
this.userName = document.myForm.name.value;
一旦您输入用户名,this.userName 的值就会过时,因此它始终为空。
您应该从构造函数中移动该行并将其放置如下所示:
this.submitButton.onsubmit = function()
{
this.userName = document.myForm.name.value;
或者
理想情况下,您可以这样做:
class User
{
constructor(userName,submitButton)
{
this.userName = document.myForm.name; /* remove .value here */
this.submitButton = document.getElementById("myForm");
}
submitForm()
{
this.submitButton.onsubmit = function()
{
if(this.userName.value == "" || this.userName.value == null) /* add .value here */
{
document.write("Name Required");
return false;
}
}
}
}
我在 2 x 行已更改的行上添加了评论。
推荐阅读
- python - python:使用来自 2 个不同列表的值创建一个新的一维列表:
- jquery - 在 jQuery 中更改动态创建的 iCheck 复选框
- c# - RemoteCertificateChainErrors - 空 ChainElementStatus C#
- javascript - 使用 fs.readFileSync 时出错
- php - 无法连接到数据库 mytable:找不到驱动程序
- css - svg 调整大小不适用于 chrome
- css - 必须添加三个属性才能更改两个输入 CSS
- ios - 在 UIActivityViewController 中仅将电子邮件+(任何特定应用程序)显示为可共享选项
- excel - 在 VBA 宏中使用 WORKDAY
- java - 带有可绘制对象的 ListView 滚动性能缓慢