为什么Firefox不显示正确的默认select选项?

我正在制作一个networking应用程序来pipe理产品SKUS。 其中一部分就是将SKU与产品名称联系起来。 在表格的每一行上,列出一个SKU,并显示一个带有产品名称的<select>框。 当前与数据库中该SKU相关联的产品被赋予一个像selected="selected"的属性。 这可以通过AJAX进行更改和更新。

很多产品<option> s – 103是准确的 – 这个列表在每行的<select>重复。

从页面上的另一个input中,我使用jQuery AJAX请求来添加新的SKU /产品关联,并且明确表示它们是即时添加的,我将它们插入到表格顶部并带有一点突出显示效果。 由于SKU数量增加了10个左右,如果我刷新页面(将所有数据从产品名称sorting的数据库加载回来),Firefox会默认显示一些错误的选项。 它显示哪个不正确的选项是不一致的,但它似乎混合了页面重新加载之前存在的选项。

如果我使用Firebug检查<select> ,则select="selected"在正确的<option>标签上。 刷新页面(或者离开并input此页面的URL返回)并不能正确显示,但很难刷新(Ctrl + F5)

Chrome和IE7都正确显示这一点。

我的理论是,这是Firefox的错误caching策略的结果。 这听起来正确吗? 有没有什么办法可以在我的代码中说:“如果这个页面被刷新了,使它成为一个硬刷新 – 从头开始​​重新加载所有东西?

更新

为了解决这个问题,我改变了策略。

  • 以前,我在每个表行上放置了一个<select>其中包含一长串<option> ,当前值设置为default
  • 现在,我把当前值放在<span> 。 如果用户点击“更改”button,我用<select>replace<span> ,“更改”button变成“确认”button。 如果他们改变了选项并点击确认,那么AJAX会更新数据库,并且<select>返回到<span> ,这次是新值。

这有两个好处:

  • 它修复了上面描述的错误
  • 它需要less得多的页面上的DOM元素(所有这些冗余的<option>

Firefox刷新时会保留所选的表单元素。 这是故意的。 Ctrl + F5是一个“硬”刷新,禁用此行为。

或者如果您在Mac上,则使用Command + Shift + R

我有一个类似的问题,但添加autocomplete="off" HTML属性,每工作的select标签。 [我正在使用Firefox 8]

阻止Firefoxcaching上次select的选项的简单方法是在页面卸载时删除所有的选项元素。 例如(假设jQuery):

 $(window).unload(function() { $('select option').remove(); }); 

我有同样的问题。 我试图改变select的值取决于哪个选项已select=“select”,但Firefox不工作。 它总是默认为第一个选项。

Chrome,Safari等工作时,我这样做:

 $( 'option[value="myVal"]' ).attr( 'selected', 'selected' ); 

…但是这在FF中不起作用。

所以我试了一下:

 $( 'option[value="myVal"]' ).prop( 'selected', 'selected' ); 

它的工作。

jQuery v1.9.1

我通过将隐藏的input上的autocomplete =“off”来使它工作。

虽然这是老问题,但下面的解决scheme可以帮助别人

在Firefox中,我注意到,“select”属性将无法正常工作,除非您将select放置在窗体中 ,其中窗体具有名称属性

 <form name="test_form" method="POST"> <select name="city"> <option value="1">Test</option> <option selected="selected" value="2">Test2</option> </selecct> 

再次记住:

  1. 表单必须具有“ 名称 ”属性和
  2. select ”必须在表格内。

正是这种情况下,Firebug具有caching禁用function。

更深层次的长期解决scheme是制定如何设置no-cache头服务器端。 你使用什么networking服务器?

每次我在Firefox中遇到奇怪的select错误,都是因为我有多个标记为选中的选项。 你确定只有一个被标记为这样吗? 似乎你可以很容易地摆脱怪异,如果你正在改变AJAX。

仅供参考:为了阻止Firefox在页面重新加载之后恢复先前select的选项,可以将包含<select>选项的整个<form>放入<iframe>

当select框位于<iframe>并重新加载容器页面时,Firefox最后的行为就像所有其他浏览器一样,只需重新设置select选项即可。

我想通了 如果你在你的HTML上使用no-cache头部放置onunload或$(window).unload(jquery),Firefox会重新加载页面,甚至从后退button初始化DOM。