回到浏览器后退button,清除表格中的所有字段

当用户使用浏览器后退button时,我需要一种方法来清除表单中的所有字段。 现在,浏览器会记住所有最后的值,并在返回时显示它们。

关于为什么我需要这个更多的说明我有一个禁用的input字段,其值是自动生成的使用algorithm,使其在一个特定的数据组中是唯一的。 提交表单后,数据input到数据库后,用户不能再次使用相同的值来提交相同的表单。 因此,我已经禁用了input字段。 但是,如果用户使用浏览器后退button,浏览器会记住最后一个值,并在input字段中保留相同的值。 因此,用户可以再次提交具有相同值的表单。

我不明白的是当你按下浏览器后退button时会发生什么。 如果页面大小在浏览器caching限制范围内,整个页面似乎从caching中检索,而不曾联系服务器。 当您按下浏览器后退button时,如何确保无论浏览器设置如何从服务器加载页面?

现代浏览器实现了一种称为后退caching(BFCache)的东西。 当你回击/转发button时,实际的页面不会被重新加载(而脚本也不会重新运行)。

如果用户在点击后退/前进键时必须执行某些操作 – 监听BFCache pageshowpagehide事件。

一个伪jQuery示例:

 $(window).bind("pageshow", function() { // update hidden input field }); 

查看Gecko和WebKit实现的更多细节。

没有JavaScript的另一种方法是使用<form autocomplete="off">来防止浏览器用最后的值重新填充表单。

另见这个问题

仅在表单内部使用一个<input type="text" >进行了testing,但在当前的Chrome和Firefox中运行正常,但不幸的是IE10没有。

我遇到了这个post,同时寻找一种方法来清除Chrome中与BFCache(后退/前进buttoncaching)相关的整个表单。

除了Sim提供的内容之外,我的用例还要求将详细信息与Back Button上的Clear Form结合使用? 。

我发现最好的办法是让表格按照预期行事,并触发事件:

 $(window).bind("pageshow", function() { var form = $('form'); // let the browser natively reset defaults form[0].reset(); }); 

如果你没有处理input事件来在JavaScript中生成一个对象或者其他的东西,那么你就完成了。 但是,如果您正在收听这些事件,那么至less在Chrome中,您需要自己触发一个change事件(或者您要处理的任何事件,包括自定义事件):

 form.find(':input').not(':button,:submit,:reset,:hidden').trigger('change'); 

reset 必须添加以做任何好事。

如果您需要兼容旧浏览器以及“pageshow”选项可能无法正常工作。 以下代码为我工作。

 $(window).load(function() { $('form').get(0).reset(); //clear form data on page load }); 

下面的链接可能会帮助你..

浏览器后退button可恢复空白字段 , 清除后退button上的表格?

希望这有助于…最好的运气

这是为我工作。

 <script> $(window).bind("pageshow", function() { $("#id").val(''); $("#another_id").val(''); }); </script> 

我最初在我的jQuery的$(document).ready部分,这也工作。 不过,我听说并不是所有的浏览器都会点击$(document).readybutton,所以我把它拿出来了。 我不知道这种方法的优点和缺点,但是我已经在多个设备上的多个浏览器上进行了testing,并且没有发现这个解决scheme的问题。