回到浏览器后退button,清除表格中的所有字段
当用户使用浏览器后退button时,我需要一种方法来清除表单中的所有字段。 现在,浏览器会记住所有最后的值,并在返回时显示它们。
关于为什么我需要这个更多的说明我有一个禁用的input字段,其值是自动生成的使用algorithm,使其在一个特定的数据组中是唯一的。 提交表单后,数据input到数据库后,用户不能再次使用相同的值来提交相同的表单。 因此,我已经禁用了input字段。 但是,如果用户使用浏览器后退button,浏览器会记住最后一个值,并在input字段中保留相同的值。 因此,用户可以再次提交具有相同值的表单。
我不明白的是当你按下浏览器后退button时会发生什么。 如果页面大小在浏览器caching限制范围内,整个页面似乎从caching中检索,而不曾联系服务器。 当您按下浏览器后退button时,如何确保无论浏览器设置如何从服务器加载页面?
现代浏览器实现了一种称为后退caching(BFCache)的东西。 当你回击/转发button时,实际的页面不会被重新加载(而脚本也不会重新运行)。
如果用户在点击后退/前进键时必须执行某些操作 – 监听BFCache pageshow
和pagehide
事件。
一个伪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的问题。