2013-07-11 36 views
1

我有一个简单的表单,其中包含一个<input>用于填写电子邮件地址,如果用户决定这样做,即该字段不是强制性的。我还使用type="email"属性,因为它有助于自动完成,并且它对智能手机用户特别有益 - 它会导致键盘重新排列以便于电子邮件输入。浏览器自动验证一个非空值的非必填字段

但是,也有一些用户没有像高级移动设备那样在输入@符号时可能会遇到一些困难。此外,还有一些桌面用户无法输入;我亲自认识一些人,我认为还有更多。对于这些用户,我将<input>的初始值设置为@。我会强调这不是占位符。

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

有没有办法告诉浏览器验证字段只有当的值不是@或空字符串?很明显,使用javascript创建我自己的验证器真的很容易,但我不想诉诸于此。

或者我的前提是用户无法输入@标志为假,我可以通过简单地将<input>空置于第一位来解决此问题?有没有关于此事的研究?我仍然偶尔会看到最近在各种技术论坛上绝望的用户投诉,我想大多数类似的没有经验的用户不会去网上询问,也许是因为他们甚至不知道如何去做。

还是应该用旧的type="text"

你认为我应该怎么做?

预先感谢您!

+0

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

回答

2

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

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

我会使用JavaScript来根据用户代理改变字段。

它是一种真正的耻辱是,W3C没有想到这一点,无疑对输入就足够了一个简单的novalidate,我真的希望这得到固定,否则一切input[type="*"]是一种供将来使用的无用。