Firebox 3 后退后按钮 diasabled 状态不恢复的一个解决方案
Firefox 3 有一个很让人讨厌的bug:基于某种目的,在表单提交时 disable 掉提交按钮,通过后退键回到这个页面后,这个提交按钮的状态依旧保持为 disabled 的状态,重新载入(软硬刷新)也无法改变。
google 良久,从 https://developer.mozilla.org/En/Using_Firefox_1.5_caching 中发现一个 window.onpageshow 事件,window.onload 事件无法在后退的页面中出发,但这个可以,所以解决方案就是它了。
window.addEventListener('pageshow', function(e){
// 重置你不需要 disabled 的按钮
}, false);
更新:网友岁月如歌的解决方案比我的方案简易和正宗多了:给提交按钮加上 autocomplete="off" 的属性。
October 27th, 2008 at 15:54
有这种事,还真没发现过
October 27th, 2008 at 17:08
我以前遇到过这种网站,后退了还是 disabled,不过记得刷新一下就好了,难道firefox3 新增的 bug?
October 28th, 2008 at 09:56
先转载了在说
October 28th, 2008 at 12:46
这其实是firefox的特性,可以关闭的,看这里:http://lifesinger.org/blog/?p=569
PS: realazy没开启自动显示trackback?
October 31st, 2008 at 15:01
一直用ff3,未发现此bug
November 3rd, 2008 at 17:28
哈哈?真是非常奇妙,今天刚刚发现这个问题,还没有来得及去研究就发现了解决方法了?巧妙,非常巧妙。
November 7th, 2008 at 18:15
这个不能说是FF的bug,而是高速缓存特性。实际上,在某些场合也许你希望back回去,原来disabled掉的部分会继续disabled(正如表单的其他部分也保持原状)。
事实上,我认为按下之后disable按钮的做法并不是一个完善的方法。比如因为某些原因你提交失败,你要如何再次提交呢?
如果要坚持使用这一方式,用pageshow事件来处理就是最合理的方式——既然本来你就是用脚本disable它的,你就有责任做好各项善后工作。除了pageshow来处理back的问题,这也包括在提交失败的情况下重新enable按钮。
November 7th, 2008 at 18:18
因此岁月如歌的autocomplete=off并不是一个合理的规避方法,何况在FF2下也是不起作用的。
November 8th, 2008 at 19:08
我这里ff3.0.3下 用岁月如歌的示例 后退依然disabled 需要刷新
November 13th, 2008 at 10:40
lazy的软硬刷新不知道分别指的什么,不过我使用FF3刷新(F5,刷新按钮,地址栏回车)是可以的,需要注意的是,back回来时,焦点有可能在disabled掉的提交按钮上,此时F5是无效的。
我觉得hax说的很有道理,不过只需要做好善后处理就行了,这个善后包括提交成功与失败,AJAX提交较好处理,普通提交时,在unload时enable提交按钮即可。
November 18th, 2008 at 14:21
to闲耘:
unload会阻止FF的高速快取特性。不过你提醒了我们,不应该等到下一次pageshow时处理,而应该在本页的pagehide事件里做善后啊。
November 26th, 2008 at 12:35
今天又看了一下,根据http://dev.opera.com/articles/view/efficient-javascript/?page=4的说法,貌似disable按钮直接会禁用Opera的fast history nav(即使用unload恢复)。所以最好不要disable按钮。