javascript年月日三級聯動下拉框
阿新 • • 發佈:2019-01-08
/*
在你的頁面需要這三條html程式碼
<select id="y" onchange="funy(this)"></select>
<select id="m" onchange="funm(this)"></select>
<select id="d"></select>
*/
var y = document.getElementById('y');
var m = document.getElementById('m' );
var d = document.getElementById('d');
var D = new Date();
var yy = D.getFullYear(); //年
var mm = parseInt(D.getMonth()) + 1; //現在是8月,月份獲取是7月。一臉懵逼!
var dd = D.getDate(); //日
var oyy = 10 * (yy - 100).toString().substr(0,3); //計算最小年 o = old
var marr = [1,3,5,7,8,10,12]; //列出31天的月份
var add; //初始化每月天數 a = all
starty(); //開始生成年下拉列表
startm(); //開始生成月下拉列表
startd(dd,mm,yy); //開始生成日下拉列表
// 生成年下拉列表
function starty(){
// 初始化
var pyy = document.createElement('option');
pyy.innerText = '選擇 年';
pyy.value = 0;
y.appendChild(pyy);
// 迴圈出所有年
for(i=yy;i>=oyy;i--){
pyy = document.createElement('option');
pyy.innerText = i + ' 年';
pyy.value = i;
y.appendChild(pyy);
}
}
// 生成月下拉列表
function startm(){
// 初始化
var pmm = document.createElement('option');
pmm.innerText = '選擇 月';
pmm.value = 0;
m.appendChild(pmm);
// 判斷是否選擇了年
if(y.selectedOptions[0].value == 0) return;
// 迴圈出所有月
for(i=1;i<=12;i++){
pmm = document.createElement('option');
pmm.innerText = i + ' 月';
pmm.value = i;
m.appendChild(pmm);
}
}
function startd(mm,yy){
// 初始化
var pdd = document.createElement('option');
pdd.innerText = '選擇 日';
pdd.value = 0;
d.appendChild(pdd);
// 判斷是否選擇了月
if(m.selectedOptions[0].value == 0) return;
var day = isadd(mm,yy);
// 迴圈出所有日
for(i=1;i<=day;i++){
pdd = document.createElement('option');
pdd.innerText = i + ' 日';
pdd.value = i;
d.appendChild(pdd);
}
}
// 判斷併產生該月的天數
function isadd(mm,yy){
if(marr.indexOf(parseInt(mm)) != -1){
add = 31;
}
else{
add = 30;
if(mm == 2 && yy % 4 == 0){
add = 29;
}
else if(mm == 2 && yy % 4 != 0){
add = 28;
}
}
return add;
}
// 年份改變時呼叫
function funy(obj){
m.innerHTML = null;
d.innerHTML = null;
var yy = obj.selectedOptions[0].value;
startm();
startd(dd,mm,yy);
}
// 月份改變時呼叫
function funm(obj){
d.innerHTML = null;
var yy = y.selectedOptions[0].value;
var mm = obj.selectedOptions[0].value;
startd(mm,yy);
}