javascript - 无法在 JS 中验证表单
问题描述
我无法验证此页面中的表格,当我打开它时,它只是说它的年龄很糟糕,尽管我写了所有东西
它应该验证所有表单,而不仅仅是一个这是 JS
const form = document.getElementsByTagName('form')[0];
const email = document.getElementById('mail');
const emailError = document.querySelector('#mail + span.error');
email.addEventListener('input', function (event) {
if (email.validity.valid) {
emailError.innerHTML = '';
emailError.className = 'error';
} else {
showError();
}
});
form.addEventListener('Introducir', function (event) {
if(!email.validity.valid) {
showError();
event.preventDefault();
}
});
function showError() {
if (email.validity.valueMissing) {
emailError.textContent = 'La dirección introducida no es válida.';
} else if (email.validity.typeMismatch) {
emailError.textContent = 'Debes introducir una dirección valida.';
} else if (email.validity.tooShort) {
emailError.textContent = `El email debe ser como mínimo ${ email.minLength } caracteres de largo; tu has introducido ${ email.value.length }.`;
}
emailError.className = 'error';
}
if (edad.value < 18) {
alert("Debes tener 18 o más")
} else {
formulario.submit()
}
这是我必须上传屏幕截图的 HTML,因为我无法添加更多代码 HTML
解决方案
我在您提供的代码中看到 2 个问题:
- 表单字段在页面加载时立即被设置为无效
- 您的
edad
表单字段在页面加载时立即得到验证
要解决问题 #1,您应该在提交表单和/或验证表单字段时将表单字段设置为无效,而不是在页面加载时。
查看这个答案,它解释了这个问题的解决方案。
要解决问题 #2,您应该将您的事件包装alert(...)
在一个事件处理程序中,例如:
const edad = document.getElementById("edad");
edad.addEventListener('input', function(event) {
if (this.value < 18) {
alert("Debes tener 18 o más");
} else {
formulario.submit()
}
});
另请注意,警报(特别是如果它出现在用户的输入中)并不是显示错误的最用户友好的方式。您应该在输入字段上使用错误消息,就像您为email
字段所做的那样:
const edad = document.getElementById("edad");
const edadError = document.querySelector('#edad + span.error');
edad.addEventListener('input', function(event) {
let value = parseInt(this.value);
if (isNaN(value) || value < 18) {
edadError.textContent = "Field is invalid.";
edadError.className = "error";
} else {
edadError.textContent = "";
edadError.classList.remove("error");
formulario.submit()
}
});
看到这个小提琴。
推荐阅读
- javascript - 在 React 测试库中发现多个元素错误
- arrays - 如何显示具有 2rem 左边距的每个子元素列表?
- python - 我在大学问题上遇到了麻烦,最终的计算结果并不相同
- prometheus - 如何在 Prometheus EC2 Service Discovery Config (ec2_sd_config) 中定义多个端口
- c# - C# wpf 将子级异步添加到布局
- visual-studio-code - Visual Studio Code Html 标签对齐
- node.js - SQL 连接查询(连接字段作为 json 对象)
- python - 以下代码的时间复杂度是多少-在数组中找到最小的缺失数
- r - 检查A列的值是否存在于B列的同一行或前几行中
- powershell - 从PowerShell中的文件中删除属性