ChatGPT解决这个技术问题 Extra ChatGPT

制作页面告诉浏览器不要缓存/保留输入值

大多数浏览器缓存表单输入值。因此,当用户刷新页面时,输入具有相同的值。

这是我的问题。当用户单击“保存”时,服务器验证 POST 数据(例如检查的产品),如果无效,则将其发送回浏览器。但是,如上所述,即使服务器清除了某些值的选择,由于浏览器缓存,它们仍然可能被选中!

我的数据有不可见的(直到选中父项)复选框,因此用户甚至可能不知道某些先前的值仍然被选中,直到再次单击保存并收到错误消息 - 即使用户认为它不是。这很烦人。

这可以通过执行 Ctrl + F5 来解决,但这甚至不是解决方案。是否有一种自动/编程方式告诉浏览器不要在某些表单/页面上缓存表单输入数据?

<form autocomplete="off"... 适合您吗?这个问题是在所有浏览器中发生的,还是仅在一个浏览器中发生?
有没有办法参考下拉 <select> 列表来回答这个问题。我有一个列表并定义了一个 selected 选项,但刷新页面会保留以前选择的选项。
我想实现相反的效果-在后退按钮上保留每个页面的输入值(单击后退两次-相应地获取输入)。有很多使用大量 JS 代码的例子,(恕我直言,它们并没有真正起作用)但是 - 有没有更简单的方法?我在表单和输入字段上都尝试了 autocomplete="on" - 不起作用。浏览器是 Chrome。

D
DisgruntledGoat

您是否明确将值设置为空白?例如:

<input type="text" name="textfield" value="">

这应该会阻止浏览器将数据放在不应该的地方。或者,您可以将 autocomplete 属性添加到表单标记:

<form autocomplete="off" ...></form>

我谈论复选框,所以我不能将值设置为“”。而且,自动完成关闭是否意味着“当用户按下 F5 时”不存储表单输入值,而不仅仅是“用于下拉自动完成列表”?
根据 developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion,autcompletion=off 会影响“会话历史缓存”,至少在 Gecko 中是这样。我将测试它是否适合我的需要。
@queen3:是的,复选框是个问题,因为没有办法明确地说“未选中”。如果您仍然遇到问题,您可以尝试 checked="false",它可能在某些浏览器中有效。另一种选择是使用 Javascript/jQuery 在页面加载时显式取消选中所有复选框。
@queen3,你的意思是“自动完成=关闭”而不是“自动完成=关闭”
所有的答案和建议都对我不起作用。使用 chrome 和开发 .net
P
Peter Mortensen

来自a Stack Overflow reference

如果浏览器已经保存了该值,则它不适用于 value="" ,因此您应该添加。

对于输入标签,您可以设置属性自动完成:

<input type="text" autocomplete="off" />

您也可以对表单使用自动完成功能。


在 Chrome 中,在单个表单元素上使用 autocomplete="off" 时似乎没有效果 - 即使 value 属性显式设置为空白,并且在发送 Cache-Control: Must-Revalidate 标头时,这也没有效果。我必须将 autocomplete="off" 属性应用于 <form> 元素本身以抑制 Chrome 中的这种行为。
我在表单上做了 autocomplete="off" 但它对我不起作用
我需要更多信息 @KingsleySimon 像浏览器一样,您的浏览器上可能有一些设置会阻止正确的行为
似乎浏览器的行为发生了变化:developer.mozilla.org/en-US/docs/Web/Security/…
并注意 html 有效形式。例如,它不是在另一个等内部形成的
P
Peter Mortensen

另一种方法是在 HTML 中的表单之后使用 JavaScript 重置表单:

<form id="myForm">
  <input type="text" value="" name="myTextInput" />
</form>

<script type="text/javascript">
  document.getElementById("myForm").reset();
</script>

P
Peter Mortensen

基本上,有两种方法可以清除缓存:

<form autocomplete="off"></form>

或者

$('#Textfiledid').attr('autocomplete', 'off');

P
Peter Mortensen

这在较新的浏览器中对我有用:

autocomplete="new-password"