<select name="year" onchange="YYYYDD(this.value)"> <option value="">年</option> </select> <select name="month" onchange="MMDD(this.value)"> <option value="">月</option> </select> <select name="day"> <option value="">日</option> </select>
function yyyyMMdd() { monthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];//每個月天數的數組 //給年下拉框賦內容 var y = new Date().getFullYear();//得到今年的年份 for (var i = y; i > 1948; i--) //以今年爲準,前30年,後30年 document.registerForm.year.options.add(new Option(i,i)); //給月份的下拉框賦內容 for (var j = 1; j < 13; j++) document.registerForm.month.options.add(new Option(j, j)); } if(document.attachEvent) window.attachEvent("onload", yyyyMMdd); else window.addEventListener("load", yyyyMMdd, false); function optionsClear(e) { e.options.length = 1;//使option的長度爲1,即第一項下面的選項清空 } function isLeapYear(year)//判斷是否閏平年 { return(0 == year%4 && (year%100 !=0 || year%400 == 0)); } function writeDay(n) //據條件寫日期的下拉框 { var e = document.registerForm.day; optionsClear(e); for (var i=1; i<(n+1); i++) e.options.add(new Option(i,i)); } function YYYYDD(str) //年發生變化時日期發生變化(主要是判斷閏平年) { //str爲月份 var monthIndex=document.registerForm.month.selectedIndex;//月option的索引 var monthValue = document.registerForm.month.options[monthIndex].value; if (monthValue == ""){ var d = document.registerForm.day; //獲取day的option oyptionsClear(d);// return; } var m = monthDays[monthValue - 1];//讓月份減1爲[monthDays(每個月天數)]這個數組的座標就指向這個月底天數 if (monthValue ==2 && isLeapYear(str)) m++; writeDay(m); } function MMDD(str) //月發生變化時日期聯動 { //str爲月份 var yearIndex=document.registerForm.year.selectedIndex; var yearValue = document.registerForm.year.options[yearIndex].value; if (yearValue == ""){ var d = document.registerForm.day; optionsClear(d); return; } var m = monthDays[str - 1]; if (str ==2 && isLeapYear(yearValue)) m++; writeDay(m); }