严格的三级联动日期下拉菜单
百度,Google了一下,找个JavaScript实现的严格的日期下拉菜单(判断闰年,月大月小,对应的日期准确),没找到。网上的都不完整,要不就小题大作,写的异常恐怖,看了头晕。于是,只有自己写了。。。 <html>
<!---
闰年判断条件:
1、能被4整除,但不能被100整除;
2、能被4整除,又能被400整除)。因为能够被400整除一定能被4整除所以 条件为能被400整除就可以。
!---->
<form name="frm" action="">
<table width="90%">
<tr>
<td width="30%" align=right>日期:</td>
<td><center>
<label>
<select id="select1" onChange="my_day()">
</select>
</label>
年
<label>
<select id="select2" onChange="my_day()">
</select>
月 </label>
<label>
<select id="select3">
</select>
</label>
日
</center>
</td>
</tr>
</table>
</form>
<script language="javascript" type="text/javascript">
var Digital=new Date();
var year = document.getElementById("select1");
var month = document.getElementById("select2");
var day = document.getElementById("select3");
function my_year(){
for(var i=0;i<150;i++)
year.options[i] = new Option(1900+i,1900+i);
}
function my_month(){
for(var i = 0; i < 12; i++) {
month.options[i] = new Option(i+1,i+1);
}
}
function my_day(){
//for(var i=0;i<day.options.length;i++){ //用循环逐个清除上次的options元素
// day.options.remove(i); //通过索引删除
// day.options.remove(day.options[i]);//通过对象删除
// }
day.options.length=0; //快速清理上次的日期值,这个很重要
switch(parseInt(month.value)){
case 1:case 3:case 5:case 7:case 8:case 10:case 12: {
for(var i = 0; i < 31; i++ )
day.options[i] = new Option(i+1,i+1);
//alert(month.value);
break;}
case 4:case 6:case 9:case 11:{
for(var i = 0; i < 30; i++ )
day.options[i] = new Option(i+1,i+1);
break; }
case 2:
if((year.value%4==0&&year.value%100!=0)||year.value%400==0){
for(var i=0;i<29;i++)
day.options[i] = new Option(i+1,i+1);
}
else{
for(var i=0;i<28;i++)
day.options[i] = new Option(i+1,i+1);
}
break;
}
}
function initSelectOps(){ //注意调用函数的顺序不能错了,否则出错
my_year();
my_month();
year.options[Digital.getYear()-1900].selected = true;
month.options[Digital.getMonth()].selected = true;
my_day();
day.options[Digital.getDate()-1].selected = true;
//alert(Digital.getYear());
//alert(year.value);
//alert(year.options[year.selectedIndex].value);
}
initSelectOps();
</script>
</html>