大多数浏览器缓存表单输入值。因此,当用户刷新页面时,输入具有相同的值。
这是我的问题。当用户单击“保存”时,服务器验证 POST 数据(例如检查的产品),如果无效,则将其发送回浏览器。但是,如上所述,即使服务器清除了某些值的选择,由于浏览器缓存,它们仍然可能被选中!
我的数据有不可见的(直到选中父项)复选框,因此用户甚至可能不知道某些先前的值仍然被选中,直到再次单击保存并收到错误消息 - 即使用户认为它不是。这很烦人。
这可以通过执行 Ctrl + F5 来解决,但这甚至不是解决方案。是否有一种自动/编程方式告诉浏览器不要在某些表单/页面上缓存表单输入数据?
<form autocomplete="off"...
适合您吗?这个问题是在所有浏览器中发生的,还是仅在一个浏览器中发生?
<select>
列表来回答这个问题。我有一个列表并定义了一个 selected
选项,但刷新页面会保留以前选择的选项。
您是否明确将值设置为空白?例如:
<input type="text" name="textfield" value="">
这应该会阻止浏览器将数据放在不应该的地方。或者,您可以将 autocomplete
属性添加到表单标记:
<form autocomplete="off" ...></form>
如果浏览器已经保存了该值,则它不适用于 value="" ,因此您应该添加。
对于输入标签,您可以设置属性自动完成:
<input type="text" autocomplete="off" />
您也可以对表单使用自动完成功能。
autocomplete="off"
时似乎没有效果 - 即使 value
属性显式设置为空白,并且在发送 Cache-Control: Must-Revalidate
标头时,这也没有效果。我必须将 autocomplete="off"
属性应用于 <form>
元素本身以抑制 Chrome 中的这种行为。
另一种方法是在 HTML 中的表单之后使用 JavaScript 重置表单:
<form id="myForm">
<input type="text" value="" name="myTextInput" />
</form>
<script type="text/javascript">
document.getElementById("myForm").reset();
</script>
基本上,有两种方法可以清除缓存:
<form autocomplete="off"></form>
或者
$('#Textfiledid').attr('autocomplete', 'off');
这在较新的浏览器中对我有用:
autocomplete="new-password"
checked="false"
,它可能在某些浏览器中有效。另一种选择是使用 Javascript/jQuery 在页面加载时显式取消选中所有复选框。