一個日期下拉式功能表的實現

來源:互聯網
上載者:User

因為做使用者中心需要用到日期的下拉式功能表來更新使用者的出生日期,花了一段時間在網上找了個能夠實現效果的代碼,主要的資料和功能實現都是在js檔案中,在這裡自己記錄下,也和大家分享一下:

1.先看效果:

 

2.js代碼

year_month_day.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 = 1900;// 增加一個最大年份的屬性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;}

 

3.HTML代碼

year_month_day.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">    <title>如何?一個日期下拉式功能表</title>   <script type="text/javascript" src="year_month_day.js"></script></head><body><select id="selYear"></select><select id="selMonth"></select><select id="selDay"></select><script type="text/javascript">    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, 2004, 2, 29);    // 也可以試試下邊的代碼    // var dt = new Date(2004, 1, 29);    // new DateSelector(selYear, selMonth ,selDay, dt);</script></body></html>

 

原始碼下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.