【发布时间】:2020-10-28 14:04:48
【问题描述】:
我想达到的目标
我尝试创建一个包含必填字段的表单。如果用户在未填写所有提交字段的情况下提交表单,则字段边框应变为红色并且不应出现标准消息“请填写此字段”。
以下形式是一个最小的工作示例:
<!DOCTYPE html>
<html lang='en'>
<head>
<title>Test</title>
</head>
<body>
<div class='inner'>
<form method='POST' action='php/send.php' class='input'>
<label>Your Name:</label><br>
<input type='text' name='myName' placeholder='Name' required oninvalid='invalid(this)'/><br><br>
<label>Your Email:</label><br>
<input type='email' name='myEmail' placeholder='E-Mail' required oninvalid='invalid(this)'/><br><br>
<label>Message:</label><br>
<textarea rows='8' name='myMessage' id='myMessage' placeholder='Message' required oninvalid='invalid(this)'></textarea><br><br>
<input type='submit' value='Send'/>
</form>
</div>
</body>
</html>
我尝试过的
我尝试将自定义验证消息设置为空字符串:
function invalid(e) {
e.setCustomValidity('');
e.style.border = '3px solid red';
}
这不起作用(在 Firefox 和 chrome 中)。
我还在某处读到(不幸的是,我再也找不到链接了)我必须将其设置为一个空格:
function invalid(e) {
e.setCustomValidity(' ');
e.style.border = '3px solid red';
}
这确实适用于 chrome,但不幸的是它不适用于 firefox(消息框仍然出现,其中有一个空格)。
我终于尝试阻止默认设置:
function invalid(e) {
e.preventDefault();
e.style.border = '3px solid red';
}
这不适用于 firefox 和 chrome。
问题
是否可以完全防止所有浏览器出现消息错误?
【问题讨论】:
-
尝试在表单标签中添加 novalidate
-
@cojack 这并不能解决问题,因为这样用户无需填写必填字段即可提交表单。
标签: javascript html