我在Symfony2中使用Post / Redirect / Pattern作为简单表单。此表单包含 id 文本字段,该字段在控制器中使用随机值动态填充。
我注意到Chrome中有一些奇怪的行为 - 如果用户提交表单然后再点击回来,则 id 字段包含一个全新的值。如果我编辑此ID然后重复此过程,则值会被缓存,因此如果Chrome看到值已更改,则看起来只会阻止缓存。
此行为不会在Firefox或Safari中出现。有没有办法让Chrome以同样的方式运行? this question中的答案说问题在于使用隐藏字段,但由于我只是在使用标准文本字段而感到茫然。
答案 0 :(得分:4)
据我所知,没有标准规定这里应该发生什么。因此,您无法真正依赖浏览器行为。
因此,如果对用户来说非常重要的是当用户按下后退按钮时它应该是新的id,那么使用一些客户端脚本来实现它。无论使用什么浏览器。
答案 1 :(得分:3)
我建议您使用本地存储来解决此问题。
<input id="some_id">
<script type="text/javascript">
localStorage.setItem("ID", "Some Id Value");
if(! localStorage.getItem("ID"))
localStorage.setItem("ID", "Some Id Value"); `
$("#some_id").val(localStorage.getItem("ID"));
</script>
您可以查看是否有本地存储空间..
if( typeof(Storage) !== "undefined" ) {
// Your Browser support Local Storage
} else {
// Your Browser does not support Local Storage
}
并使用Chrome控制台进行跟踪。我无法为此上传图片。打开Chrome控制台,
资源 - &GT;本地存储 - &gt;你的Sitename
答案 2 :(得分:2)
大多数现代浏览器缓存表单输入值。因此,当用户刷新页面时,输入具有相同的值。因此,浏览器获取html并使用该值进行输入。
<input value="SOME_VALUE">
但是,如果用户修改了该字段浏览器将使用用户的值而不是html的值。
我建议您将autocomplete="off"
添加到您的ID字段。