而输入2003应立刻变为1-28.
如何在每次循环前清掉StartDay中的所有值。
  通过设置innerHTML为空即可。StartMonth.innerHTML="";

解决方案 »

  1.   

    我觉得你的算法不好,首先1-28号肯定是存在的,
    如果年月变了,能否像个办法只改遍29-31。
    查插帮助,看有没有合适的remove之类的方法帮忙。
      

  2.   

    很简单的代码,没想到楼主写了这么长。看看我的:<INPUT name="StartYear" id="StartYear" type="text" size="4" maxLength="4" onchange="DC();">
    <SELECT name="StartMonth" id="StartMonth" onchange="DC()">
    <OPTION value="1" selected>1</OPTION>
    <script language="JavaScript">
    for(i=2;i<=12;i++){document.write('<option value="'+i+'">'+i+'</option>')}
    </script>
    </SELECT>
    <SELECT name="StartDay" id="StartDay">
    <OPTION value="1" selected>1</OPTION>
    <script language="JavaScript">
    for(i=2;i<=31;i++){document.write('<option value="'+i+'">'+i+'</option>')}
    </script>
    </SELECT>
    <script language="JavaScript">
    function DC(){
    var objY = StartYear, objM = StartMonth, objD = StartDay;
    var y=parseInt(objY.value), m=parseInt(objM.value), d=parseInt(objD.value);
    if(isNaN(y) || isNaN(m) || isNaN(d)){return;}
    var oD=new Date(y,m-1,d);
    var h29=(new Date(y,m-1,29)).getDate()==29;
    var h30=(new Date(y,m-1,30)).getDate()==30;
    var h31=(new Date(y,m-1,31)).getDate()==31;
    var mx=h31 ? 31 : (h30 ? 30 : (h29 ? 29 : 28));
    if(objD.length>mx){
    objD.length=mx;
    objD.selectedIndex=mx-1;
    }
    while(objD.length<mx){
    objD.options.add(new Option(objD.length+1,objD.length+1));
    }
    }
    //下面是初始化
    StartYear.value="2004";
    StartMonth.value="3";
    StartDay.value="31";
    DC();
    </script>
      

  3.   

    var oD=new Date(y,m-1,d);  /// 这一行多余,测试用的,可删掉。
      

  4.   

    http://dev.csdn.net/develop/article/13/13781.shtm