2017-02-13 64 views
-1

我想创建一个日历,我有两个问题。在Javascript中创建日历(Html)

  1. 月份不会显示为文本,而是显示为数字。
  2. 当我更改月份时,日子也不会更新。几个月有不同的天数,因此选择的天数选择需要根据月份选择中的选择进行更新。

enter image description here

日/月/年。

下面是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); 
    } 
} 
+1

'ID ===“日“|| “year”'错了:应该是'id ===“day”|| id ===“year”' – Pointy

+4

您确定不想使用该工作中已有的几千个插件之一吗? – Dinei

+0

你不应该把'this'作为参数传递给那个函数。它应该已经可以访问。 –

回答

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

年是truthy,所以monthsarray将永远不会被视为价值。这样做:

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

你也不想

switch(SelectObject){ 

你想在它的值进行切换:

switch(SelectObject.options[SelectObject.selectedIndex].value){ 

误区3

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

谢谢。有关月份不显示为文本的问题现在已修复,将SelectObject更改为SelectObject.value并不能解决另一个问题。 – David

+0

@David http://stackoverflow.com/questions/1085801/get-selected-value-in-dropdown-list-using-javascript –

+0

我试了SelectObject.selected [SelectObject.selectedIndex] .value和SelectObject.options [ SelectObject.selectedIndex] .value的。仍然不工作,但可能是因为我的开关情况?我从select.add(opi)更改为select.appenChild(opi)。 – David