7

我有一个<select>包含单个<option>元素的标签:

<select id="someselect">
  <option value="2">B</option>
</select>

单曲<option>后来被 jQuery 取代。新的选项列表始终包含旧选项:

selected = $('#someselect').val();
$('#someselect').html('<option value="1">A</option><option value="2">B</option>').val(selected);

这按预期工作。然而,当在谷歌浏览器中离开网页然后点击后退按钮时,会发生一些奇怪的事情。选择标签回到了它的初始状态(有意义),但是单个<option>元素没有被选中!

Chrome 中这种行为的原因是什么?

我创建了一个最小的工作示例:http
://dl.dropbox.com/u/27566470/backdemo.html 最初只有一个<option>. 首先点击“点击”替换选项(但保持选择“B”选项),然后点击“谷歌”导航离开,然后使用 Chrome 的后退按钮查看<select>只有一个选项的标签未选中的。

编辑:澄清一下,我对如何解决这个问题不感兴趣。我很好奇为什么 Chrome 会这样工作。使用后退按钮后提供原始(未修改的)DOM 是有道理的,但为什么没有选择唯一的选择选项?

4

3 回答 3

5

要回答我自己的问题,这似乎是一个 Chromium 错误。我已经提交了一个目前已确认和分类的错误:http
://code.google.com/p/chromium/issues/detail?id=125509 所以希望这应该在未来得到修复 :)

于 2012-05-01T07:47:54.623 回答
2

因为每个在文档外部导航的浏览器(# 仍在内部)在导航返回时都会加载服务器缓存版本,也就是说 Chrome 会在您选择一个选项时修改selectedDOM它再次加载selected

于 2012-04-26T13:13:33.613 回答
2

因为当使用浏览器后退按钮时,它使用页面的缓存版本,但在您的页面中存在丢失的动态数据,因此浏览器找不到先前选择的值,您可以使用 jQuery 设置它:

$(document).ready(function(){
     $('#someselect').val('0');
});
于 2012-04-26T13:09:14.787 回答