由年和月所决定的“日”的下拉框的值,如何在点击IE的“后退”按钮时,日期的值仍然是上一次选择的值?

lxq1981 2004-10-15 05:42:11
比如说,我们在JS中,生成年和月的SELECT对象,比如说,我们选择“2004”“6”,那么当我们退回到当前页面的时候,上述下拉框显示的值仍然是上一次输入的值(如果刷新本页面,就会自动回到初始值);但是“日”却需要由年和月来确定,并在<select name="year1">和<select name="month1">的onchange事件中触发一个函数来实现:函数如下:
function toDate()
{
with(document.all){
vYear=parseInt(year1.options[year1.selectedIndex].text)
vMonth=parseInt(month1.options[month1.selectedIndex].text)

day1.length=0;
for(i=0;i<(new Date(vYear,vMonth,0)).getDate();i++)
{
day1.options[day1.length++].value=day1.length;
day1.options[day1.length-1].text=day1.length;
}
}
其中,“day1"为日的下拉框SELECT对象的名称,但是,如果每次点击后退,不管在前面在“日”中输入的是什么值,<select name="day1">的value值仍然变为1号,请教各位大虾,我应该在上述的函数中如何设置,才能让每次点击IE的“后退”按钮,显示的“日”仍然是上一次输入的值(如原来是3月5日)那么返回后“日”的SELECT对象仍然是“5”,而不是“1”?谢谢!
...全文
124 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxq1981 2004-10-18
  • 打赏
  • 举报
回复
谢了,JK_10000老兄;我的MSN是:sspanzervor@hotmail.com;有空咱们聊聊。
JK_10000 2004-10-18
  • 打赏
  • 举报
回复
day选择里的options如果是在onload之前就有,
在返回页面时,会得上次所选择的值,
如果day选择里的options是在onload之后才有,或是在页面的操作过程中使用了day.outerHTML=str..,
则不会记得上次所选择的值。

以下
前两种情况都有记得上次所选择的值,
但第三种情况却不会。

情况1:----------------------------------
<select name=day >
<script language=javascript>
for(var i=1;i<32;i++)
document.write("<option value='"+i+"'>"+i);
</script>
</select>

情况2:----------------------------------
<select name=day >
<option value=1>1
<option value=2>2
<option value=3>3
<option value=4>4
<option value=5>5
<option value=6>6
<option value=7>7
<option value=8>8
<option value=9>9
<option value=10>10
<option value=11>11
<option value=12>12
<option value=13>13
<option value=14>14
<option value=15>15
<option value=16>16
<option value=17>17
<option value=18>18
<option value=19>19
<option value=20>20
<option value=21>21
<option value=22>22
<option value=23>23
<option value=24>24
<option value=25>25
<option value=26>26
<option value=27>27
<option value=28>28
<option value=29>29
<option value=30>30
<option value=31>31
</select>


情况3:----------------------------------
<body onload=initFun()>
<select name=day >
</select>
</body>
<script language=javascript>
function initFun()
{
//向day里加31个option.
}
</script>
lxq1981 2004-10-18
  • 打赏
  • 举报
回复
很奇怪的是,为什么用我原来的那个函数就不行?如果要能够在缓存中存储,首先要在HTML中设置SELECT的所有值吗?
JK_10000 2004-10-18
  • 打赏
  • 举报
回复
回复人: lxq1981() ( ) 信誉:100 2004-10-18 10:16:00 得分: 0
-----------
月份从二月变到三月时,这段代码就会执行
lxq1981 2004-10-18
  • 打赏
  • 举报
回复

请教最后一个问题:

var theMonthDays=(new Date(document.all.year.value,document.all.month.value*1+1,0)).getDate();

if(document.all.day.value>theMonthDays)
document.all.day.value=theMonthDays;

for(var i=document.all.day.length+1;i<=theMonthDays;i++) //加上不足的天option
{
var newOption=new Option(i,i); //创建一个option
document.all.day.add(newOption); //向select里加一个option
}
怎么感觉这段代码不会执行?因为如果theMonthDays为31的话,循环会退出,而如果不是31的话,theMonthDays肯定小于31,那么这个循环也不会被执行。请高手指教!
lxq1981 2004-10-16
  • 打赏
  • 举报
回复
如果设置不要缓存的话,那不是"年"和"月"也无法正常显示上一次的选择值了吗?
JK_10000 2004-10-16
  • 打赏
  • 举报
回复
作了些改动。
--------------

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>年月日Select</title>
</head>

<body onload="changeDays();">
<form action="" method=get>
年月日选择框:<br>
<select name=year onchange="changeDays()" >
<option value=2000>2000<option value=2001>2001<option value=2002>2002<option value=2003>2003
</select>
<select name=month onchange="changeDays()">
<option value=0>1<option value=1>2<option value=2>3<option value=3>4<option value=11>12
</select>
<select name=day >
<option value=1>1
<option value=2>2
<option value=3>3
<option value=4>4
<option value=5>5
<option value=6>6
<option value=7>7
<option value=8>8
<option value=9>9
<option value=10>10
<option value=11>11
<option value=12>12
<option value=13>13
<option value=14>14
<option value=15>15
<option value=16>16
<option value=17>17
<option value=18>18
<option value=19>19
<option value=20>20
<option value=21>21
<option value=22>22
<option value=23>23
<option value=24>24
<option value=25>25
<option value=26>26
<option value=27>27
<option value=28>28
<option value=29>29
<option value=30>30
<option value=31>31
</select><br>
<a href="about:blank">about:blank</a>
</form>
</body>

</html>
<script language=javascript>
function changeDays()
{
var theMonthDays=(new Date(document.all.year.value,document.all.month.value*1+1,0)).getDate(); //得到该月份的天数
if(document.all.day.value>theMonthDays)
document.all.day.value=theMonthDays; //如果日期过大,则选择最大可能日期
for(var i=document.all.day.length+1;i<=theMonthDays;i++) //加上不足的天option
{
var newOption=new Option(i,i); //创建一个option
document.all.day.add(newOption); //向select里加一个option
}
for(var i=document.all.day.length;i>theMonthDays;i--) //删除多余的天option
{
document.all.day.remove(i-1);
}
}
</script>
lxq1981 2004-10-16
  • 打赏
  • 举报
回复
楼上的前辈,小弟有几事不明:
1, var newOption=new Option(i,i);
document.all.day.add(newOption);
是什么意思?还有,OPTION是通用的属性吗?
2,对于非31天的月,为什么要将他的值先ADD然后在REMOVE呢?
JK_10000 2004-10-16
  • 打赏
  • 举报
回复
<html>

<body onload="changeDays();">
<form action="" method=get>
<select name=year onchange="changeDays()" >
<option value=2000>2000<option value=2001>2001<option value=2002>2002<option value=2003>2003
</select>
<select name=month onchange="changeDays()">
<option value=0>1<option value=1>2<option value=2>3<option value=3>4
</select>
<select name=day >
<option value=1>1
<option value=2>2
<option value=3>3
<option value=4>4
<option value=5>5
<option value=6>6
<option value=7>7
<option value=8>8
<option value=9>9
<option value=10>10
<option value=11>11
<option value=12>12
<option value=13>13
<option value=14>14
<option value=15>15
<option value=16>16
<option value=17>17
<option value=18>18
<option value=19>19
<option value=20>20
<option value=21>21
<option value=22>22
<option value=23>23
<option value=24>24
<option value=25>25
<option value=26>26
<option value=27>27
<option value=28>28
<option value=29>29
<option value=30>30
<option value=31>31
</select>
<a href="about:blank">about:blank</a>
</form>
</body>

</html>
<script language=javascript>
function changeDays()
{
var theMonthDays=(new Date(document.all.year.value,document.all.month.value*1+1,0)).getDate();
for(var i=29;i<=theMonthDays;i++)
{
if(!document.all.day.options[i-1])
{
var newOption=new Option(i,i);
document.all.day.add(newOption);
}
}
for(var i=document.all.day.length;i>theMonthDays;i--)
{
document.all.day.remove(i-1);
}
}

</script>
rabbit666 2004-10-15
  • 打赏
  • 举报
回复
在meta下设置不要缓存
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2004-10-15 05:42
社区公告
暂无公告