1

На моем главном компьютере под управлением 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>

CodePen

Однако - в Chrome 81 на компьютере с Windows - выбор автозаполнения во второй форме также приведет к заполнению первой формы.

Это ошибка или правильное поведение автозаполнения?

Если так, есть ли трекер ошибок, где это задокументировано?

1 ответ1

0

Именованные поля в HTML-форме хранятся со своими значениями браузером в профиле пользователя, поэтому их можно повторно использовать в других формах с помощью механизма автозаполнения. Поле с тем же именем затем используется глобально на этом веб-сайте и на всех других веб-сайтах, имеющих поля с таким же именем.

В статье Chromium формы автозаполнения это видно из структуры таблицы базы данных SQLite, в которой эти значения хранятся в виде пар, где столбцы таблицы:pair_id, name, value, count. Здесь видно, что исходный веб-сайт и исходный URL-адрес страницы здесь не отображаются и не имеют значения.

Вы использовали стандартные имена для полей формы, которые можно найти в различных стандартах: имя, телефон, электронная почта. Некоторые браузеры даже позволяют вводить значения для них в определении профиля, которое затем автоматически заполняет браузер для всех форм, используя эти стандартные имена полей. Браузер хранит все значения полей, а не только те, которые имеют известные имена.

Вы дважды использовали одни и те же имена, которые браузер сохранит в вашем профиле для повторного использования. При автозаполнении он будет использовать только одно из значений, введенных вами для полей с одинаковыми именами, на основе своих внутренних алгоритмов, например, последнего введенного или наиболее используемого. По сути, вы объявили, что значения в обеих формах полей должны быть идентичными, что браузер сделал в соответствии с запросом, автоматически заполнив затем одинаковыми значениями.

Есть и другие известные варианты названий полей, которые вы использовали. Например, помимо имени, которое вы использовали, существуют имена fname, mname и lname для имени, отчества и фамилии.

В 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>

Полезные ссылки:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .