生年月日ドロップダウンメニュー効果を実現する純JS
4823 ワード
Webページを作成する際、ユーザーに登録アカウントページを提供する必要がある場合があります.ユーザー登録設計には多くの情報があります.その中には生年月日に関するものがあります.ユーザー体験のため、ユーザーに手動で入力させたくありません.HTML 5のdateは、現在多くのブラウザでサポートされているわけではありません.そのため、JSで年、月、日の3つのドロップダウンボックスの日付選択を実現することができます.具体的なコードは以下の通りです.
1、birthdayなどのjsファイルを新規作成する.js;
2、登録フォームのページで、先ほど書いたjsを引用する
1、birthdayなどのjsファイルを新規作成する.js;
function DateSelector(selYear, selMonth, selDay) {//
this.selYear = selYear;
this.selMonth = selMonth;
this.selDay = selDay;
this.selYear.Group = this;
this.selMonth.Group = this;
// 、 onchange
if (window.document.all != null) // IE
{
this.selYear.attachEvent("onchange", DateSelector.Onchange);
this.selMonth.attachEvent("onchange", DateSelector.Onchange);
}
else // Firefox
{
this.selYear.addEventListener("change", DateSelector.Onchange, false);
this.selMonth.addEventListener("change", DateSelector.Onchange, false);
}
if (arguments.length == 4) // 4, Date
this.InitSelector(arguments[3].getFullYear(), arguments[3].getMonth() + 1, arguments[3].getDate());
else if (arguments.length == 6) // 6,
this.InitSelector(arguments[3], arguments[4], arguments[5]);
else //
{
var dt = new Date();
this.InitSelector(dt.getFullYear(), dt.getMonth() + 1, dt.getDate());
}
}
// --
DateSelector.prototype.MinYear = 1960;
// -- , getFullYear()
DateSelector.prototype.MaxYear = (new Date()).getFullYear();
//
DateSelector.prototype.InitYearSelect = function () {
// OPION select
for (var i = this.MaxYear; i >= this.MinYear; i--) {
// OPTION
var op = window.document.createElement("OPTION");
// OPTION
op.value = i;
// OPTION
op.innerHTML = i;
// select
this.selYear.appendChild(op);
}
}
//
DateSelector.prototype.InitMonthSelect = function () {
// OPION select
for (var i = 1; i < 13; i++) {
// OPTION
var op = window.document.createElement("OPTION");
// OPTION
op.value = i;
// OPTION
op.innerHTML = i;
// select
this.selMonth.appendChild(op);
}
}
//
DateSelector.DaysInMonth = function (year, month) {
var date = new Date(year, month, 0);
return date.getDate();
}
//
DateSelector.prototype.InitDaySelect = function () {
// parseInt
var year = parseInt(this.selYear.value);
var month = parseInt(this.selMonth.value);
//
var daysInMonth = DateSelector.DaysInMonth(year, month);
//
this.selDay.options.length = 0;
// OPION select
for (var i = 1; i <= daysInMonth; i++) {
// OPTION
var op = window.document.createElement("OPTION");
// OPTION
op.value = i;
// OPTION
op.innerHTML = i;
// select
this.selDay.appendChild(op);
}
}
// onchange , ( selYear selMonth)
// Group ( DateSelector , ) InitDaySelect
// e event
DateSelector.Onchange = function (e) {
var selector = window.document.all != null ? e.srcElement : e.target;
selector.Group.InitDaySelect();
}
//
DateSelector.prototype.InitSelector = function (year, month, day) {
// , selYear selMonth
// InitDaySelect ,
this.selYear.options.length = 0;
this.selMonth.options.length = 0;
// 、
this.InitYearSelect();
this.InitMonthSelect();
// 、
this.selYear.selectedIndex = this.MaxYear - year;
this.selMonth.selectedIndex = month - 1;
//
this.InitDaySelect();
//
this.selDay.selectedIndex = day - 1;
}
2、登録フォームのページで、先ほど書いたjsを引用する
var selYear = window.document.getElementById("selYear");
var selMonth = window.document.getElementById("selMonth");
var selDay = window.document.getElementById("selDay");
// DateSelector , select
new DateSelector(selYear, selMonth, selDay, 1995, 1, 17);