Кэширование Chrome 77 <select>выбранный параметр, даже если autocomplete = "off" - PullRequest
2 голосов
/ 16 октября 2019

Если элемент <select> имеет параметр selected, Chrome будет игнорировать этот выбранный параметр, даже если autocomplete="off" для элемента <select> при использовании функции браузера «перейти назад». Один из найденных мной обходных путей - это обертка выбора в <form>, но я не хочу, чтобы в моем html были посторонние формы.

Вопрос : есть ли способ исправить это в Chromeбез переноса в элемент формы? (Такое поведение не наблюдается в Firefox, другие браузеры не тестировались)

Воспроизвести, используя Chrome 77 :

1.) Посетите этот jsfiddle и изменитеоба выбирают «Один». Обратите внимание, что «Два» является выбранным параметром для обоих, поэтому при загрузке страницы это то, что должно быть выбрано в обоих элементах

2.) Нажмите на ссылку на Google (навигация страницы на самом деле не происходит,Вывод jsfiddle на самом деле не может перейти на веб-страницы)

3.) Когда вы щелкнули мышью в выводе jsfiddle, нажмите кнопку браузера назад

4.) Обратите внимание, что элемент selectкоторый обернут в форму, имеет правильный элемент, выбранный по умолчанию, «Два». В элементе выбора, не обернутом в форму, выбран неверный элемент «Один»

https://jsfiddle.net/m5hg8n40/1/

<!-- chrome ignores 'selected' -->
<select autocomplete="off">
  <option value="1">One</option>
  <option value="2" selected>Two</option>
</select>

<br><br>
<a href="https://google.com">google.com</a>
<br><br>

<!-- chrome obeys 'selected' -->
<form autocomplete="off">
  <select>
    <option value="1">One</option>
    <option value="2" selected>Two</option>
  </select>
</form>

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

MAC OS Catalina 10.15

Браузеры

  • Google Chrome Версия 77.0.3865.120 (Официальная сборка) (64-бит)
  • Версия Safari 13.0.2 (15608.2.30.1.1)
  • Firefox 70.0

Проверенные действия:

  • Загрузите jsfiddle, который я вижу как с выбранным параметром two
  • Если я нажму на Googleссылка и возврат, оба сохраняет two выбранный
  • Если я изменю первый выбор (без формы) на one, зайдите в Google и вернитесь, он сохранит one выбранный
  • Если я изменю второй выбор (с формой) на one, зайду в Google и вернусь назад, он покажет выбранную опцию two

Итак, насколько я вижу. При загрузке работает для обоих, но в окне History немного различаются оба варианта выбора ввода, если они заключены в тег <form>

, один из них будет сохранять последнее выполненное действие, идругой будет иметь приоритет формы для сброса его входов в состояние по умолчанию.

Исключение: Firefox обрабатывает оба с одинаковым поведением (как без формы)


Для меня этоКажется законным использовать тег там, если он вам нужен, его можно использовать для сбора данных, даже если они будут использоваться локально или удаленно. (не хуже, чем на страницах с 1047248 <div> везде и нулевым семантическим HTML ), так что это действительно зависит от вас, я думаю. И если вам нужно хранить данные другим способом, вы можете использовать LocalStorage

0 голосов
/ 21 октября 2019

Я думаю, что без js ничего не поделаешь.

<body onload="document.querySelector('select').value = document.querySelector('select [selected]').value">
<select>
  <option value="1">One</option>
  <option value="2" selected>Two</option>
</select>

<br><br>
<a href="https://google.com">google.com</a>
<br><br>

<form autocomplete="off">
  <select>
    <option value="1">One</option>
    <option value="2" selected>Two</option>
  </select>
</form>
</body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...