如果<select>
元素具有selected
选项,则即使使用浏览器的“向后导航”功能,即使autocomplete="off"
元素上的<select>
,Chrome也会忽略该所选选项。我发现一种解决方法是将选择内容包装在<form>
中,但我不想在HTML中添加多余的形式。
问题:有没有一种方法可以在Chrome中解决此问题,而无需包装表单元素? (此行为在Firefox中不会发生,尚未测试其他浏览器)
要使用Chrome 77进行复制:
1。)访问此jsfiddle,并将两个选择都更改为“一个”。请注意,“两者”是两者的选定选项,因此,在页面加载时,这是在两个元素中都应选择的
2。)单击指向google的链接(实际上不会发生页面导航,jsfiddle输出实际上不能导航到网页)
3。)用鼠标单击jsfiddle输出,然后单击浏览器的后退按钮
4。)您将注意到,包装在表单中的select元素默认情况下具有正确的元素“ Two”。未包装在表单中的select元素选择了错误的元素“ One”
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>
答案 0 :(得分:2)
two
选项two
one
,请转到google并转到
返回,它会保持选中one
one
,请转到google,然后转到
返回,它将显示选中的two
选项据我所知。
两者均在加载时有效,但是window History对待两个输入选择(如果它们都包装在<form>
标签中,则略有不同)
一个将保留执行的最后一个动作,另一个将优先使用表单将其输入重置为默认状态。
Excepcion:Firefox以相同的行为对待它们(就像没有表单一样)
对我来说,在您需要的地方使用标签似乎是合法的,即使它们将在本地或远程使用,也可以用来收集数据。
(并不比到处都有1047248 <div>
且零semantic HTML的页面差),所以我认为这取决于您。而且,如果您需要以其他方式存储数据,则可以使用LocalStorage
答案 1 :(得分:0)
我认为没有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>