解惑

解己之惑,解人之惑

标签:后退

浏览器回退的问题

这个是同事今天遇到的问题,有一个Form,里面有几个下拉列表Select和一个输入框Input,点击按钮进入下一个页面,在下一个页面有一个后退按钮,点击后退按钮(调用的就是history.back())返回前面的页面,页面上根据Form的内容拼接的一个字符串的内容不太对,那个Input输入框的部分的内容不正确,其它的下拉列表的内容是正确的,看了下他的代码,发现是使用document.write在页面加载过程中直接输出的,这个问题以前遇到过,但是我只是猜测浏览器的工作原理,没有找到权威的论据:
Input输入框是有一个defaultValue属性的,就是页面最开始的时候的值,如果用户修改输入框的值,那么变化的是value值,而如果进入下一个页面,然后使用浏览器的回退功能返回,那么页面加载的时候还是先加载的那个defaultValue的值,用户修改的那些值在页面完成加载后才会变化。所以同事遇到的那个问题可以通过页面的onLoad解决或者window.setTimeout解决。
明天到公司验证下,加些JavaScript应该可以确定这个过程。

慎用JavaScript修改Form的元素的值

很早就收到一个Bug说修改了某个元素的值以后,点击Next提交然后使用浏览器的Back按钮返回,结果那个元素的值是提交以前的值。
这个应该是浏览器的History功能的限制,它不能记录你的Javascript代码对Form元素的值的修改。在完成向导之类的功能的时候不要使用自定义的表单元素,或者不要用JavaScript去修改其它的需要提交的元素的值,这些修改都不会被浏览器的History功能记录。当用户点击浏览器的后退时,他可能看到不是他期望的结果。
一般要解决这个问题,要么禁用浏览器的后退功能(很多MIS系统可能都是这么干的),自己另外提供一个后退功能重新从后台取数据并刷新页面。
要么使用Cookie记录那些操作并在页面的onload事件里面从Cookie提取那些记录。
无论是那种方法都不是很方便。

不知道有没有完美的解决方案。另外这个问题对IE和FF都是有效的。

© 2024 解惑

本主题由Anders Noren提供向上 ↑