在我的主计算机上,运行 Ubuntu 18.04 和 Chrome 78,此表单按我预期的方式工作 - 每个表单都可以独立填写。
form {
border: solid 1px black;
padding: 1em;
display: inline-block;
}
form input {
display: block;
}
<form>
<label> name<input type = "text" name ="name" /> </label>
<label> phone<input type = "text" name ="phone" /> </label>
<label> email<input type = "text" name ="email" /> </label>
<button type="submit"> submit</button>
</form>
<form>
<label> name <input type = "text" name ="name"/> </label>
<label> phone<input type = "text" name ="phone" /> </label>
<label> email <input type = "text" name ="email"/> </label>
<button type="submit"> submit</button>
</form>
但是 - 在 Windows 机器上的 Chrome 81 上 - 选择第二个表单上的自动填充将导致第一个表单也被填充。
这是一个错误,还是正确的自动填充行为?
如果是这样,是否有记录此问题的错误跟踪器?
答案1
HTML 表单中命名的字段及其值由浏览器存储在用户的个人资料中,因此可以通过自动填充机制在其他表单中重复使用。然后,此网站和所有其他具有相同名称字段的网站将全局使用同名字段。
在 Chromium 文章中 表单自动填充 从 SQLite 数据库表的结构中可以看出这一点,该表将这些值存储为对,其中表列为: pair_id,名称,值,计数。从这里可以看出,原始网站和原始页面URL并没有出现在这里,并且没有任何重要性。
您已使用表单字段的标准名称,这些名称可以在各种标准中找到:姓名、电话、电子邮箱。某些浏览器甚至允许在配置文件定义中输入值,然后浏览器会自动填充使用这些标准字段名称的所有表单。浏览器会存储所有字段值,而不仅仅是那些具有众所周知名称的字段值。
您使用了两次相同的名称,浏览器会将其存储在您的配置文件中,以便再次使用。自动填充时,它会根据其内部算法(例如最后输入的或最常用的)仅使用您为同名字段输入的值之一。实际上,您已声明要使两种形式的字段中的值相同,浏览器会按要求自动填充相同的值。
您使用的字段名还有其他众所周知的变体。例如,除了姓名你使用的,存在 名称,名字和名称,代表名字、中间名和姓氏。
在 HTML5 中
形式标准
已扩展,添加了autocomplete
标签属性,可以区分工作电话号码和家庭电话号码等。例如:
<p><label>Customer name: <input name="custname" required autocomplete="shipping name"></label></p>
<p><label>Telephone: <input type=tel name="custtel" autocomplete="shipping tel"></label></p>
<p><label>E-mail address: <input type=email name="custemail" autocomplete="shipping email"></label></p>
有用的参考资料:
- Chromium 项目 - 表单自动填充
- 如何在 Google Chrome 中触发自动填充功能?
- HTML 生活标准 - 表格 自 2019 年 1 月 24 日起