<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>

解决方案 »

  1.   

    楼上的前辈,小弟有几事不明:
    1,    var newOption=new Option(i,i);  
          document.all.day.add(newOption);  
    是什么意思?还有,OPTION是通用的属性吗?
    2,对于非31天的月,为什么要将他的值先ADD然后在REMOVE呢?
      

  2.   

    作了些改动。
    --------------<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>
      

  3.   


    请教最后一个问题: 
      
    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,那么这个循环也不会被执行。请高手指教!
      

  4.   

    回复人: lxq1981() ( ) 信誉:100  2004-10-18 10:16:00  得分: 0  
    -----------
    月份从二月变到三月时,这段代码就会执行
      

  5.   

    很奇怪的是,为什么用我原来的那个函数就不行?如果要能够在缓存中存储,首先要在HTML中设置SELECT的所有值吗?
      

  6.   

    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>
      

  7.   

    谢了,JK_10000老兄;我的MSN是:[email protected];有空咱们聊聊。