javascript - Javascript reportValidity 未按预期工作
问题描述
我有一个表格,有两个字段(telno
和email
),我需要至少填写一个,所以要么是电子邮件,要么是电话号码,或者两者兼而有之。所有其他字段都是必需的,并使用内置的表单验证,我想对这两个字段使用类似的东西,所以在提交表单之前它会运行preValidateForm
。这第一次工作并显示有效性消息,但随后每次提交表单时,该函数都不会被调用,并且无论字段的内容如何,都会出现相同的有效性消息。如何使验证按预期工作,仅在提交表单且未填写任何字段时才显示消息?
function isEmpty(val) {
if (val.trim().length == 0) {
return true;
} else {
return false;
}
}
function preValidateForm(event) {
var form = document.getElementById("contact-form");
console.log(isEmpty(form["telno"].value) && isEmpty(form["email"].value))
if (isEmpty(form["telno"].value) && isEmpty(form["email"].value)) { //If both fields are empty
form["telno"].setCustomValidity("Please provide either a phone number, email or both");
form.reportValidity(); //Show validation message
event.preventDefault(); //Don't submit form
return false;
} else {
form["telno"].setCustomValidity("");
return true;
}
}
<form id="contact-form" action="/" method="POST" onsubmit="return preValidateForm(event)">
<label for="first">First name<span class="required">*</span></label>
<input id="first" name="first" required="" type="text" value="">
<label for="last">Last name<span class="required">*</span></label>
<input id="last" name="last" required="" type="text" value="">
<p>Please provide either a phone number, email or both:<span class="required">*</span></p>
<label for="telno">Phone number</label>
<input id="telno" name="telno" type="tel" value="">
<label for="email">Email</label>
<input id="email" name="email" type="email" value="">
<label for="message">Your message:<span class="required">*</span></label>
<textarea id="message" name="message" required=""></textarea>
<input id="submit" name="submit" type="submit" value="Submit">
</form>
解决方案
推荐阅读
- dart - 如何在 Flutter 中移除 AppBar 前导图标周围的额外填充
- python-2.7 - 面对 StaleElementReferenceException:消息:元素不再是有效的问题。请检查是否有出路
- python-3.x - 使用 selenium 在 python3 中执行 javascript 代码时出错
- java - 您可以从 jsp 文件中 <% %> 块中的 servlet 获取会话属性吗?
- windows - 如何在保留其所有配置文件的同时在同级目录中运行可执行文件?
- r - 减少 R 代码的运行时间
- django - 如何在 django 的数据目标中添加动态变量
- android - 无法使用存储访问框架 (SAF) 设置文档导航器的初始位置
- mysql - 如何比较一行中两列之间的值,如果不同则创建另一行?
- javascript - getElementById().style.display 不起作用