Calendar.prototype.addmonth = function(year){         //给month的select添加事件
var obj = document.getElementById("month")
//obj.attachEvent("onchange",this.changemonth)
//=======================>
var me=this;
obj.attachEvent("onchange",function(){me.changemonth();})
}Calendar.prototype.changemonth = function(){     
document.getElementById("day").length=0
var nowday = this.day[event.srcElement.value]
//为什么是null呢,因为此时this==window对象了 ,你的事件添加方法有问题,原型addmonth如上
alert(this.day[1]) 
}

解决方案 »

  1.   

    Calendar.prototype.changemonth = function(){     
    //document.getElementById("day").length=0
    var nowday = this.day[event.srcElement.value]
    alert(this.day[0]) //  这里alert出来的是 还是null?
    }
      

  2.   

    问题原因楼上朋友已经说了
    这样改动后可以,或者用prototype提供的bind方法Calendar.prototype.addmonth = function(year){         //给month的select添加事件
    var obj = document.getElementById("month"), oThis = this;
    obj.attachEvent("onchange", function(){oThis.changemonth.call(oThis)})
      

  3.   

    <script>
    function Calendar(startyear,endyear){
    this.year = new Array()
    for(var j=0;startyear<=endyear;startyear++,j++){
    this.year[j]=startyear;
    }
    this.month=[1,2,3,4,5,6,7,8,9,10,11,12]
    this.day=[ [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
    ]
    }
    //创建3个select
    Calendar.prototype.Createselect=function(){
    var sele1 =documnet.createElement("select");
    sele1.id="year"
    document.body.appendChild(sele1)
    var sele2 = document.createElement("select") 
    sele2.id="month"
    document.body.appendChild(sele2)
    var sele3 = document.createElement("select") 
    sele3.id="day"
    document.body.appendChild(sele3)
    this.Initialization()
    this.addmonth()
    }
    //给个select赋值
    Calendar.prototype.Initialization=function(){
    for(var i= 0;i<this.year.length;i++)
    {document.getElementById("year").options.add(new Option(this.year[i],i))}
    for(var i= 0;i<this.month.length;i++)
    {document.getElementById("month").options.add(new Option(this.month[i],i))}
    for(var i= 0;i<this.day[1].length;i++)
    {document.getElementById("day").options.add(new Option(this.day[1][i],i))}
    }
    //是不是闰年
    Calendar.prototype.Isyear = function(year){
    if (0==year%4&&((year%100!=0)||(year%400==0))) 
    {this.day[1]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]} 
    else 
    {this.day[1]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]}
    }
    //给month的select添加事件
    Calendar.prototype.addmonth = function(year){
    var obj = document.getElementById("month")
    var me=this;
    obj.attachEvent("onchange",function(){me.changemonth();})
    }
    //month的select事件
    Calendar.prototype.changemonth = function(){
    this.Isyear(this.year[document.getElementById("year").value])
    document.getElementById("day").length=0
    var nowday = this.day[event.srcElement.value]
    for(var i= 0;i<nowday.length;i++)
    {document.getElementById("day").options.add(new Option(nowday[i],i))}
    }
    //初始化
    window.onload=function(){
    var c = new Calendar(2000,2009)
    c.Createselect()
    }
    </script>
      

  4.   

    <script>
    function Calendar(startyear,endyear){
    this.year = new Array()
    var j=0
    for(var i = startyear;i<=endyear;i++)
    {this.year[j]=i;
     j++}this.month=[1,2,3,4,5,6,7,8,9,10,11,12]this.day=[[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]]
    }
    Calendar.prototype.Createselect=function(){
    var sele1 = document.createElement("select") 
    sele1.id="year"
    document.body.appendChild(sele1)
    var sele2 = document.createElement("select") 
    sele2.id="month"
    document.body.appendChild(sele2)
    var sele3 = document.createElement("select") 
    sele3.id="day"
    document.body.appendChild(sele3)
    this.Isyear(this.year[0])
    this.Initialization()
    this.addmonth()
    this.addyear()
    }Calendar.prototype.Initialization=function(){
    for(var i= 0;i<this.year.length;i++)
    {document.getElementById("year").options.add(new Option(this.year[i],i))}
    for(var i= 0;i<this.month.length;i++)
    {document.getElementById("month").options.add(new Option(this.month[i],i))}
    for(var i= 0;i<this.day[0].length;i++)
    {document.getElementById("day").options.add(new Option(this.day[0][i],i))}
    }Calendar.prototype.Isyear = function(year){
    if (0==year%4&&((year%100!=0)||(year%400==0))) 
    {this.day[1]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]} 
    else 
    {this.day[1]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]}
    }Calendar.prototype.addyear = function(){
    var obj = document.getElementById("year")
    var me=this;
    obj.attachEvent("onchange",function(){me.changeyear();})
    }Calendar.prototype.changeyear = function(e){   
     e =e||event
      this.Isyear(this.year[event.srcElement.value])
      document.getElementById("day").length=0
      if(document.getElementById("day").length<30)
      for(var i= 0;i<this.day[1].length;i++)
    {document.getElementById("day").options.add(new Option(this.day[1][i],i))}
    }Calendar.prototype.addmonth = function(year){        
    var obj = document.getElementById("month")
    var me=this;
    obj.attachEvent("onchange",function(){me.changemonth();})
    }Calendar.prototype.changemonth = function(e){    
    e=e||event 
    document.getElementById("day").length=0
    var nowday = this.day[e.srcElement.value]for(var i=0;i<nowday.length;i++)
    document.getElementById("day").options.add(new Option(nowday[i],i))
    }
    window.onload=function(){
    var c = new Calendar(2007,2009)
    c.Createselect()
    }</script>