2017-02-13 2 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

'ид ===" день "|| «year» 'is wrong: должен быть' 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){ 

Ошибке три

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

Смежные вопросы