【发布时间】:2011-05-21 05:26:25
【问题描述】:
考虑一个网页,它有一个带有 JavaScript 事件处理程序的选择菜单,该处理程序与菜单的 onchange 事件相关联,该事件在触发时会使用新的查询字符串(使用菜单中选择的值)重新加载页面。
问题:当用户点击返回按钮时,页面 DOM 会从缓存中恢复,但不会 选择菜单的状态。
受影响的浏览器: Firefox 和 Safari(使用后退/前进缓存)
示例:
<script language="javascript" type="text/javascript">
function reloadPage() {
var menu = document.getElementById("select1");
var val = menu.options[menu.selectedIndex].value;
window.location.href = 'test.html?select1=' + val;
}
</script>
<form action="#" method="get" name="form1">
<select name="select1" id="select1" onChange="reloadPage();">
<option value="A" selected>Option A</option>
<option value="B">Option B</option>
<option value="C">Option C</option>
<option value="D">Option D</option>
</select>
</form>
查看此页面并注意选择了选项 A。然后选择一个不同的选项(比如选项 C) - 重新加载页面(使用查询字符串,?select1=C)。然后点击返回按钮 - 选择菜单继续显示选项 C 已被选中。
问题:有谁知道为什么选择菜单没有恢复以及如何解决这个问题?我过去曾使用 JavaScript 来强制页面上的表单字段与查询字符串匹配,但这种方法存在问题(即 FF 和 Safari 在从缓存),这对我来说似乎是一个黑客攻击。
有什么建议吗?
更新:我刚刚想到可能会发生以下情况:
- 选项 C 被选中
- 页面已缓存
- JavaScript 加载新 URL
- 点击返回按钮
- 选项 C 已恢复,因为它是 之前缓存的内容 JavaScript/页面重新加载。
所以我认为这不是浏览器没有恢复选择菜单状态的问题,而是时间问题。
【问题讨论】:
-
你有没有成功解决过这个问题?您还需要这方面的帮助吗?
标签: javascript