javascript - For 循环在验证表单时只运行一次
问题描述
我有一个表单,我正在使用 JavaScript 进行一些表单验证。
function validate() {
let arr = [];
arr[0] = form.name ;
arr[1] = form.mobNumber ;
arr[2] = form.email ;
arr[3] = form.query ;
for (let num = 0; num < arr.length; num++){
if (arr[num].value == ""){
arr[num].placeholder = "This field is mandatory";
arr[num].style.backgroundColor = "rgba(0, 0, 255, 0.1)";
arr[num].classList.add('redPlaceholder');
return false;
}
}
}
.redPlaceholder::placeholder {
color: red;
font-style: italic;
font-family: 'Roboto' sans-serif;
}
<form name="form" method="post" netlify id="form" onsubmit="return validate()" >
<input type="text" name="name" placeholder="Name"><br>
<input type="email" name="email" placeholder="E-mail"><br>
<input type="number" name="mobNunber" placeholder="Contact Number"><br>
<textarea name="query" placeholder="Your Query" rows="5"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>
在 js 部分,我有一个空数组,然后通过它们的名称访问它们来添加表单的输入字段。在 for 循环中,我正在检查每个输入字段是否已填充。如果没有,那么我有一些代码要执行。那个代码块运行得很好。
问题是,当我在所有字段为空的情况下单击提交按钮时,for 循环中的代码只运行一次 - 对于第一个输入字段。尽管我已经多次检查了语法,但我认为循环存在一些问题。
解决方案
在 html 中,您为 mobilenumber 输入了名称,mobNunber
但 javascript 会查找,mobNumber
因此我修复了该问题。在这些不完整的输入之一期间简单地检查是否arr.length == num
返回 false 不起作用,因此我创建了一个变量,如果其中一个输入未填写,则在 for 循环结束后返回 false 时打勾。我还补充说arr[num].style.backgroundColor = "transparent";
,如果用户未能填写输入内容,即使在填写完输入内容后,背景也不会始终保持紫色。
function validate() {
let err = false;
let arr = [];
arr[0] = form.name ;
arr[1] = form.mobNumber ;
arr[2] = form.email ;
arr[3] = form.query ;
for (let num = 0; num < arr.length; num++){
if (arr[num].value == ""){
arr[num].placeholder = "This field is mandatory";
arr[num].style.backgroundColor = "rgba(0, 0, 255, 0.1)";
arr[num].classList.add('redPlaceholder');
err = true;
}
else{
arr[num].style.backgroundColor = "transparent";
}
}
if (err){
return false;
}
console.log(arr[1] + "test")
}
.redPlaceholder::placeholder {
color: red;
font-style: italic;
font-family: 'Roboto' sans-serif;
}
<form name="form" method="post" netlify id="form" onsubmit="return validate()" >
<input type="text" name="name" placeholder="Name"><br>
<input type="email" name="email" placeholder="E-mail"><br>
<input type="number" name="mobNumber" placeholder="Contact Number"><br>
<textarea name="query" placeholder="Your Query" rows="5"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>
编辑:可以event
在调用函数时简单地添加到函数中,而不是创建变量。onsubmit="return validate(event)"
并用于e
表示当函数实际运行function validate(e)
并且 for 循环检测到其中一个值等于 0 时,您可以使用该函数e.preventDefault()
停止提交表单。此处示例:https ://jsfiddle.net/nukeboy212/vskt8epj/2/ 。
推荐阅读
- ansible - Ansible:从库存中检索数据
- python - 将链表打印为矩阵形式
- python - 正则表达式没有用空格替换字符串
- amazon-eks - 为什么我的 ALB 无法将流量路由到 EKS 上的 Kubernetes 服务?
- amazon-web-services - 如何从 Lake Formation 创建 SageMaker 功能组
- javascript - JavaScript 中的 setTimeout(() => btn.click()) 和 btn.click() 有什么区别?
- arrays - 在创建由文本组成的 ndarray 时,有没有办法让 numpy 忽略 UnicodeEncode 错误?
- sql - TDengine中数据的过期时间和`keep`参数
- git - 如何将分叉上的 git 标签与上游同步?
- parse-platform - 如何在 back4app 解析服务器上处理 pdf 文件