浏览器后退操作时,表单状态的还原
测试页面:no_autocomplete_test.html
结论:
- Safari 和 Opera 是两个极端,一个完全还原,一个完全保留。
- Firefox 下最简单的办法是设置 autocomplete = ‘off’ 属性。
- IE 必须在 setTimeout 中还原表单值才有效。
- Chrome 除了不支持 onpageshow, 其它表现和 Firefox 一致。
最后胜出的是:
'v' == '\v' && setTimeout(function() {
// reset code
}, 0);
同时在 html 中,将要还原的表单元素加上 autocomplete = ‘off’ 属性。
最后,忘掉 Opera.

June 6th, 2009 on 0:21
硬性重置表单未必合理。
用户使用某种(主)浏览器,一般会对其特性有所了解,如果突然不符合用户预期期望,自作聪明的重置只会适得其反。
这是一个跨平台大一统 vs 使用原生平台特性的话题。
另外,我觉得后退就应该保留之前的状态,密码除外(例如某些错误导致发送表单失败,我希望能退回去备份之前的表单内容),如果一定要重置的话,我更希望是“重置”为之前的状态。
June 6th, 2009 on 11:51
挺好
平时都没留意这个
June 6th, 2009 on 20:17
浏览器应当保留表单内容,是否重置应由操作者来执行,多加一个按钮足矣
强制清空未必是一种良好的浏览体验
例如在本页我写了很长的回复,却忘记填用户名就提交,此时转到出错页,后退时难道我还要重新再写一遍?
一个写了很多文字的人在一个并不是非常重要的页面上提交失败的结果往往是离开这个页面,而不是重新再写一遍
June 6th, 2009 on 20:56
@1楼和@3楼:说得很有道理,不过我没说过任何情况下,后退操作都要还原哦,呵呵
本文是纯技术探讨,在某些不常见的情景下,为了避免程序bug,需要在后退操作中,重置表单的某些项,这时的技术实现是本文的目的。
绝大部分场景下,根本用不着。
June 7th, 2009 on 10:38
哈哈~忘掉opera~
June 7th, 2009 on 14:25
学习了
June 7th, 2009 on 14:39
‘v’ == ‘\v’ 是干吗得
June 21st, 2009 on 2:23
我自己在使用在使用的话不希望后悔就把我填写的数据删除了,反而希望能保留!不过从大多数用户来看他们不会进行后退操作,如果是分几步的填写的表单,那么他们填写到下一步,然后发现之前上一页填写的有误他们可能通过浏览器自己的后退来返回到上一个页修改以前的数据,在修改好后再到下一步,这时他们可能更希望之前填写的数据被保留下来! 个人观点!大家一起讨论学习!
July 5th, 2009 on 17:32
‘v’ == ‘\v’ 是干吗得
是最短的判断IE的代码
August 3rd, 2009 on 0:40
不错
August 10th, 2009 on 15:36
IE下,在window.onload中使用form的reset()方法就可以了,setTimeout有些山寨;
FF下,使用autocomplete=off会关掉浏览器自己的history的suggestioin,建议用window.onunload = function () {}
February 1st, 2010 on 10:54
还是.net的viewstate靠谱。
April 15th, 2010 on 17:13
settimeout不保险,可以在window.onload中reset,在body.onload中reset不行。
May 20th, 2010 on 12:45
@天堂左我往右:最短的IE判断是 !-[1,]
leave a reply