2013-08-21 87 views
0

我想寫一個簡單的JavaScript函數在一個選擇框更新的日子裏,每當月份變化:更新天

/* automatically update days based on month */ 
function updateMonth(iMonth, iDay) { 
    var el = document.getElementById(iDay); 
    el.options.length = 0; 
    var d = new Date(); 
    for(i = 0; i < (32 - new Date(d.getFullYear(), iMonth, 32).getDate()); i++) { 
     option = new Option(i, i); 
     el.options[i] = option; 
    } 
} 

<select name="start_month" id="start_month" onchange="updateMonth(this.value, 'start_day');"> 
<option>...</option> 
</select> 
<select name="start_day" id="start_day"> 
<option>...</option> 
</select> 
<select name="start_year" id="start_year"> 
<option>...</option> 
</select> 

看來,首先要更新,但我會得到瘋狂的結果。 2月份給我30天,1月27日,他們都從0開始?其次,我不確定是否需要考慮除本月之外的那一年?

任何幫助理解這將不勝感激。

http://jsfiddle.net/NK7yd/

+1

完成您的代碼或從該月號作爲日期()月號提供的jsfiddle – PiLHA

+1

減去1是基0 – jeff

+0

@PiLHA我加入的jsfiddle。 –

回答

1

你的功能應該是

window.updateMonth= function(iMonth, iDay) { 
    var el = document.getElementById(iDay); 
    el.options.length = 0; 

    for(var d = new Date(2013,iMonth-1,1); d.getMonth()==iMonth-1; d.setDate(d.getDate()+1)) { 
     option = new Option(d.getDate(), d.getDate()); 
     el.options[d.getDate()-1] = option; 
    }; 
} 

我必須讀從選擇價值與年(而不是硬編碼2013)。 http://jsfiddle.net/b5XMM/3/

+0

這似乎工作,除非月份更改,默認日設置爲空白而不是第一天,並且天數不填充...您能幫助我解決這些問題? –

+0

已更正。第一個元素被省略,所以是空的。 – IvanH