解惑

解己之惑,解人之惑

标签:form

慎用JavaScript修改Form的元素的值

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

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

Post和Get

又是一个朋友的问题,他有一个form,method是get,action里面带了参数,例如:
<form action="test.do?p1=1" method="GET">
<input type="text" size="10" value="2" name="p2">
<input type=submit value="Submit">
</form>

在服务器端,提交以后的信息里面参数p1的值没有了!
如果把method修改为POST方式就没有问题了;
又或者把form里面的那个input输入框去掉,那么p1也有值了。
很奇怪吧。
目前还不清楚是浏览器导致这种问题还是有规范约定这种处理方式。我的感觉是有规范进行这种约定,然后浏览器就把form的内容转换为一个URL,例如例子的情况,浏览器就把请求的   URL转换为test.do?p2=2了,忽略了action原先带的参数p1。而如果是POST方式,那么浏览器就不用做转换,直接提交了。
没有办法,我们只能接受这个事实。
阅读全文

© 2024 解惑

本主题由Anders Noren提供向上 ↑