用Javascript(Html)创建日历

用Javascript(Html)创建日历,javascript,html,Javascript,Html,我正在尝试创建一个日历,我有两个问题 月份不会显示为文本,而是显示为数字 当我更改月份时,日期也不会更新。月份有不同的天数,因此需要根据月份选择中的选择更新天数选择中的天数 日/月/年格式 以下是html代码: <form> <select id="day" name="day"> </select> <select id ="month" onchange = "changeDays(this)" name="month" >

我正在尝试创建一个日历,我有两个问题

  • 月份不会显示为文本,而是显示为数字
  • 当我更改月份时,日期也不会更新。月份有不同的天数,因此需要根据月份选择中的选择更新天数选择中的天数

    日/月/年格式

    以下是html代码:

    <form>
      <select id="day" name="day">
      </select>
    
      <select id ="month" onchange = "changeDays(this)" name="month" >
      </select>
    
      <select id="year" name="year">
      </select>
    </form>
    </div>
    
    
    
    以下是Javascript代码:

    setCalendar('day',1, 31, false); 
    setCalendar('month',1, 12, false); 
    setCalendar('year',1910, 2017, false); 
    
    function setCalendar(id, min, max, logic){
    
    if(logic){
    removeOptions(id); 
    }
    
    var monthsarray = ["January", "February","March" ,"April" ,"May" ,"June" ,"July" ,"August" ,"September", "October", "November" , "December"];  
    
    for  (i = min; i <= max; i++){
    select = document.getElementById(id); 
    var opti = document.createElement("option"); 
    opti.value = i; 
    opti.text = id === "day" || "year" ? i.toString() : monthsarray[i-1]; 
    select.add(opti); 
    }
    
    }
    
    
    function changeDays(SelectObject){
    
    switch(SelectObject){
    case 1: 
    //January
     setCalendar('day',1,31,true); 
    break; 
    case 2: 
    //February
     setCalendar('day',1,28,true); 
    break; 
    case 3:
    //March 
     setCalendar('day',1,31,true); 
    break; 
    case 4:
    //April  
     setCalendar('day',1,30,true); 
    break; 
    case 5:
    //May 
     setCalendar('day',1,31,true); 
    break; 
    case 6: 
    //June
     setCalendar('day',1,30,true); 
    break; 
    case 7: 
    //July
     setCalendar('day',1,31,true); 
    break; 
    case 8:  
    //August
     setCalendar('day',1,31,true); 
    break;
    case 9: 
    //September
     setCalendar('day',1,30,true); 
    break; 
    case 10: 
    //October
     setCalendar('day',1,31,true); 
    break; 
    case 11: 
    //November
     setCalendar('day',1,30,true); 
    break; 
    case 12:  
    //December
     setCalendar('day',1,31,true); 
    break;  
    }
    
    }
    
    function removeOptions(selectObject)
    {
        var i;
        for(i = selectObject.options.length - 1 ; i >= 0 ; i--)
        {
            selectObject.remove(i);
        }
    }
    
    setCalendar('day',1,31,false);
    setCalendar('month',1,12,false);
    setCalendar('年',1910年,2017年,假);
    功能设置日历(id、最小值、最大值、逻辑){
    if(逻辑){
    移除选项(id);
    }
    var monthsarray=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];
    对于(i=min;i=0;i--)
    {
    选择object.remove(i);
    }
    }
    
    年份是真实的,所以monthsarray永远不会被视为值。这样做:

    opti.text = id === "day" || id==="year" ? i.toString() : monthsarray[i-1]; 
    
    你也不想要

    switch(SelectObject){
    
    要打开其值:

    switch(SelectObject.options[SelectObject.selectedIndex].value){
    
    错误三

    select.add(opi) => select.appendChild(opi)
    

    id==“day”| |“year”
    是错误的:应该是
    id==“day”| | id==“year”
    你确定你不想使用已经存在的无数插件中的一个来完成这项工作吗?你不需要将
    这个
    作为该函数的参数来传递。它应该已经可以访问了。闰年呢?不难找到一个月内有多少天,并将其全部清除switch@charlietfl如果有更好的方法,我可以将switch方法更改为其他方法(我肯定有)。如果你想推荐一种方法,请推荐。我还打算加上闰年,但我觉得有必要在继续使用计算器之前修正我的错误。谢谢。关于月份不显示为文本的问题现已解决,将SelectObject更改为SelectObject.value未能解决另一个问题。很遗憾,David我尝试了SelectObject.selected[SelectObject.selectedIndex].value和SelectObject.options[SelectObject.selectedIndex].value。由于某种原因仍然不能工作,但可能是因为我的开关箱?我从select.add(opi)更改为select.appenChild(opi)。没有错误。不幸的是,我正在使用记事本+,我想今晚我会改变它。@David在firefox/chrome中打开。右击。检查元件。安慰与记事本++无关。。。
    
    select.add(opi) => select.appendChild(opi)