<select name="select1" id="select1" onchange="onSelect2()">
<option value="">--请选择--</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2009">2008</option>
<option value="2009">2007</option>
<option value="2009">2006</option>
</select>

<select name="select2" id="select2">
<option value="" >--请选择--</option></select>
月function onSelect2(){
var year = document.getElementById("select1").value;
var myDate = new Date();
var mYear = myDate.getFullYear();
var html ;
var thisMonth =myDate.getMonth()+1;
var lastMonth = thisMonth-1;
if(year == mYear){
for(var i=0;i<lastMonth;i++){
select2.options[i] = new Option(lastMonth-i,lastMonth-i);
}
}

if(year != mYear){
for(var i = 0;i < 12 ; i++){
select2.options[i] = new Option(12-i,12-i);
}
}

}
问题是这样的,如果我一开始2010的时候,很正常。然后我选select1中的其他值的时候,select2的值很正常,然后我在select1中选2010就出现问题了,出现的问题是在select2中出现了1——(lastMonth-2) 的值重复出现。

解决方案 »

  1.   

    select2清空先
    select2.length=0
    再填充
      

  2.   

    function onSelect2(){
            var year = document.getElementById("select1").value;
            var myDate = new Date();
            var mYear = myDate.getFullYear();
            var html ;
            var thisMonth =myDate.getMonth()+1;
            var lastMonth = thisMonth-1;
            if(year == mYear){
    select2.length=0
                for(var i=0;i<lastMonth;i++){
                        select2.options[i] = new Option(lastMonth-i,lastMonth-i);
                }
            }
            
            if(year != mYear){
                for(var i = 0;i < 12 ; i++){
                    select2.options[i] = new Option(12-i,12-i);    
                }
            }
                
        }
      

  3.   

    原因就是孟子说的那样,是下拉框的元素和长度的关系。当你选择非2010时,下拉框有12个元素,当你选回2010时,下拉框的总体长度并没有改变,你只是改变前面的7个元素,而后面的5个未变,所以看起来就重复了。select2.length=0 是一个破坏性操作,长度为0后里面一个元素也没有了。最后,楼主还忘记了加一个当前选择是否是“请选择”的判断,前面年是“请选择”后面月也应是“请选择”。
      

  4.   

    你选择的时候是去触发给第二select 填充值 那当然得先清空下select2的值
      

  5.   

    +var year = document.getElementById("select1").value;
    year = Number(year);转换下类型
      

  6.   

    这个我前些日子也遇见过,select.length = 0;就OK了~
      

  7.   

    那就再多加一点难度,就是如何指定select2选中某个值