为什么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>
再次记住:
- 表单必须具有“ 名称 ”属性和
- “ 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。