Html 浏览器自动验证具有空值的非必填字段

Html 浏览器自动验证具有空值的非必填字段,html,validation,Html,Validation,我有一个简单的表单,其中包含一个,用于在用户决定填写电子邮件地址时填写,即该字段不是必填字段。我还使用了type=“email”属性,因为它有助于自动完成,并且对智能手机用户特别有利——它会使他们的键盘重新排列,以便于电子邮件输入 但是,也有一些使用非高级移动设备的用户在键入@符号时可能会遇到一些困难。此外,仍有一些桌面用户无法键入它;我个人知道一些,我想还有很多。对于这些用户,我将的初始值设置为@。我要强调,这不是占位符 但现在这两件事发生了冲突。由type=“email”激活的浏览器本机表单

我有一个简单的表单,其中包含一个
,用于在用户决定填写电子邮件地址时填写,即该字段不是必填字段。我还使用了
type=“email”
属性,因为它有助于自动完成,并且对智能手机用户特别有利——它会使他们的键盘重新排列,以便于电子邮件输入

但是,也有一些使用非高级移动设备的用户在键入
@
符号时可能会遇到一些困难。此外,仍有一些桌面用户无法键入它;我个人知道一些,我想还有很多。对于这些用户,我将
的初始值设置为
@
。我要强调,这不是占位符

但现在这两件事发生了冲突。由
type=“email”
激活的浏览器本机表单验证机制现在阻止表单提交,因为他们不理解该字段不是强制性的,并且我不介意用户将
@
作为值发送

只有当值不是
@
或空字符串时,是否有方法告诉浏览器验证字段?显然,使用javascript制作自己的验证器非常容易,但我不想求助于此

或者我关于用户无法键入
@
符号的前提是错误的,而我可以通过首先将
保留为空来解决这个问题?对这件事有什么研究吗?我仍然偶尔会在各种技术论坛上看到绝望的用户最近的抱怨,我想绝大多数类似的没有经验的用户不会上网询问,也许是因为他们甚至不知道如何去问

或者我应该使用旧的
type=“text”

你认为我应该怎么做


提前谢谢你

似乎禁用用户代理验证的唯一方法是在表单中添加一个
novalidate
。显然,这将禁用表单上的所有UA验证,而不仅仅是一个输入。也许您可以对所有其他输入使用Javascript验证,并对所有其他输入使用
input[type=“text”]

<form novalidate>
    <input type="email" value="@">
    <input type="submit" value="submit">
</form>

我将使用javascript根据用户代理更改字段


W3C没有想到这一点,真是太遗憾了,输入上一个简单的
novalidate
就足够了,我真的希望这个问题得到解决,否则所有
input[type=“*”]
对于将来的使用都是无用的。

我不知道你的用户群,但总的来说,我认为人们知道电子邮件地址,至少知道如何写这些地址。此外,如果你看看像Facebook这样拥有11.1亿用户且在电子邮件文本框中没有“@”符号的网站,人们似乎可以处理它再次,检查你的用户群,可能与facebook非常不同,然后自己回答这个问题。另外,如果有人不知道如何写“@”,这个人很可能首先就没有电子邮件地址。