javascript - 使用 Javascript 进行表单验证:未设置错误标签
问题描述
我试图创建一个 html 表单。
我正在填写并使用 javascript 验证表单。我还为每个字段创建了一个错误标签。
为此,我创建了一个对象form_fields
,其中包含字段名称、输入元素、错误元素和相应的验证函数。
每个字段的input_field
anderror_field
是在填写表单时设置的。
我的代码:
const form_fields = {
name : { validate: validate_name },
roll : { validate: validate_roll }
};
const form = document.getElementById("student_data");
function fill_form() {
for(const [field, data] of Object.entries(form_fields)) {
form.innerHTML += `
<label for="${field}_field">Enter your ${field}: </label><br>
<input type="text" id="${field}_field" name="${field}_field">
<label style="color: red;" id="${field}_error_label">*</label><br>
`;
data.input_field = document.getElementById(field + "_field");
data.error_field = document.getElementById(field + "_error_label");
console.log(field, data.input_field, data.error_field);
}
form.innerHTML += '<button type="submit">Submit</button>';
}
function validate_name(name, error_field) {
console.log(name);
if(name == "") {
error_field.innerHTML = "Name is required.";
return true;
}
}
function validate_roll(roll, error_field) {
if(roll == "") {
error_field.innerHTML = "Roll number is required.";
return true;
}
else if(! new RegExp("^19HCS40[0-9]{2}$").test(roll)) {
error_field.innerHTML = "Provided roll number is not correct.";
return true;
}
}
function validate() {
let error_occurred = false;
console.log(form_fields.roll.error_field);
error_occurred = validate_roll('', form_fields.roll.error_field);
console.log(error_occurred);
return false;//!error_occurred;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Some Task</title>
</head>
<body onload="fill_form()">
<form id="student_data" onsubmit="return validate()"></form>
<!--<script src="validate.js"></script>-->
</body>
</html>
当我运行该行时error_occurred = validate_roll('', form_fields.roll.error_field);
,我预计它会设置错误标签并返回true
。
但是,由于某种原因,标签没有设置,即使validate_roll
函数返回true
.
更有趣的是控制台说错误已设置!
name <input type="text" id="name_field" name="name_field"> <label style="color: red;" id="name_error_label">*</label> validate.js:15
roll <input type="text" id="roll_field" name="roll_field"> <label style="color: red;" id="roll_error_label">*</label> validate.js:43
<label style="color: red;" id="roll_error_label">Roll number is required.</label> validate.js:45
true
我在这里做错了什么?
解决方案
推荐阅读
- elasticsearch-rails - rails elasticsearch - 条件索引
- django - django-filter 上的 ModelChoiceFilter
- matlab - 从图像中提取 CMY 颜色分量
- javascript - 我想显示一个页面的数据并使用 chrome 扩展显示到网站的另一个页面中?
- powerbi - 显示正确的目标线
- wget - wget 递归下载所有子目录中的特定文件类型
- scala - Spark:以指定的日期格式读取 csv
- flutter - Flutter 应用程序上的 flutter_dotenv 出现空安全错误
- php - 购买多件商品,但只扣入钱包一次
- python - 使用引用自身的类型进行键入